这个工作或将要进行切片(即只有与Base对象占用的内存相对应的内存将被释放,而不是整个Derived对象):删除指向Derived对象的基指针
Base* ptr = new Derived;
delete ptr;
如果没有,这是否?
delete static_cast<Derived*>(ptr);
这个工作或将要进行切片(即只有与Base对象占用的内存相对应的内存将被释放,而不是整个Derived对象):删除指向Derived对象的基指针
Base* ptr = new Derived;
delete ptr;
如果没有,这是否?
delete static_cast<Derived*>(ptr);
这将工作。
通过基础对象指针调用派生对象的方法是多态基础之一。
但是,请确保基类析构函数是虚拟的,以便正确地销毁对象。
是的,它是。我只是有点累,我想:)谢谢。 – d7samurai
不客气;) –
这不是一个对象切片。当您将派生对象转换为基础对象时,会发生对象切片。您正在操作指针。你总是可以使基类析构函数虚拟化,以确保按照与创建相反的顺序删除对象。
如果'Base'的析构函数是'virtual',那么一切都会好起来的。如果情况并非如此,编译器很可能会提醒您。 – arne
啊,当然.. – d7samurai
http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors –