从基类指针中删除对象
Delete an object from a base class pointer
假设我有两个类A和B,定义如下:
class A {
public:
virtual void pureVirtual() = 0;
}
class B : public A {
public:
virtual void pureVirtual();
}
我当然有其他的方法,但这只是为了这个例子。现在,在我的cpp代码中,我有这样的var:
B *myB = new B;
A *myA = myB;
是否有可能通过在myA上调用delete来删除myB对象:delete myA;
?我需要做一些特别的事情才能做到这一点吗?对于面向对象的思想和编程风格来说,它是可以接受的,还是一个非常糟糕的想法?
谢谢!
这是可能的,但A
需要一个虚拟析构函数才能正常工作:
class A {
public:
virtual void pureVirtual() = 0;
virtual ~A() {}
}
从oo的角度来看,这没有什么问题。
将基类的析构函数定义为virtual将确保派生类的析构函数也将被调用,并且在它之前被调用。
当我知道我计划使用Base*到派生对象时,我总是将析构函数定义为virtual。
您唯一需要做的就是在基类
中使析构函数为虚函数。相关文章:
- 迭代时从向量和内存中删除对象
- C++从对象自己的类中删除对象
- 如何通过对象的类属性删除对象,并返回其对象值?
- 删除对象(具有不同类型)的引用时会发生什么情况?
- 从列表C++中删除对象
- c++ 循环访问对象列表并删除对象
- 从对象本身的容器中删除对象
- 从尝试引用已删除函数的矢量 C++ 中删除对象
- 如何通过指向元组的共享指针删除对象
- 防止通过接口删除对象
- 在 c++ 中从内存中删除对象
- 当对象被删除时,复制被删除对象的对象如何
- 当我使用dynamic_cast并删除对象删除时,析构函数是如何工作的?
- 从内存中删除对象
- 通过C++中的删除方法自行删除对象
- C++ - 析构函数只是释放内存还是实际删除对象
- 如何通过存储在 std::list 中的指针删除对象?
- 如何通过对象参数从指针矢量中删除对象和指针
- 我可以删除对象的右值版本的函数吗?
- 使用对象的索引从矢量中删除对象