看一看C++语言标准,有没有什么办法可以调用派生类的析构函数,而无需调用基类的析构函数?只有调用类的调用析构函数
因此,对于类
class Base { public: virtual ~Base() {} };
class Derived : public Base { public: ~Derived();};
如果将是可能的写代码等
Base *basePtr = new Derived();
//do something with basePtr
// Now somehow destroy Derived while keeping Base - call ~Derived() only,
// line below however will call both ~Derived() and ~Base() - how it can be done?
dynamic_cast<Derived*>(basePtr)->~Derived();
于是,经过上述basePtr代码的执行将仅指向的基本对象,一样,如果它是由
创建Base *basePtr = new Base();
加上对操作引起的Base对象的任何修改basePtr之间调用新的Derived()和销毁派生类?
或者,这是禁止的,这是不可能的吗?
@NPE如果这是可能的,该怎么做?用例的动机是由http://stackoverflow.com/questions/15843549/cast-one-derrived-class-to-another-without-changing-base-class,我从现在开始单独询问这部分好奇,如果它在所有理论上是可能的,以及如何做到这一点... – 2013-04-08 15:56:31
其实,我没有注意到*,而保留'基地'*位。我撤回了我以前的评论。 – NPE 2013-04-08 15:58:34
听起来像是一个XY问题... – Griwes 2013-04-08 16:24:57