She*_*mes 2 c++ pointers children object parent
假设我有 A 类:
class A {
A();
};
Run Code Online (Sandbox Code Playgroud)
B 类是 A 的子类:
class B : public A {
B() : A();
~B();
};
Run Code Online (Sandbox Code Playgroud)
和一个 A 指针向量:
std::vector<A*> a_pointers;
Run Code Online (Sandbox Code Playgroud)
现在,我用以下方法初始化所有内容:
B* b_obj = new B();
a_pointers.push_back(b_obj);
Run Code Online (Sandbox Code Playgroud)
如何删除 b_obj 对象?应该是这样的吗?
delete a_pointers[0];
Run Code Online (Sandbox Code Playgroud)
会起作用吗?如果不是,应该怎么做?
您需要给 A 一个虚拟析构函数(请参阅此处了解原因):
class A {
A();
public:
virtual ~A() = default;
};
Run Code Online (Sandbox Code Playgroud)
此时调用delete a_pointers[0]将完全破坏b_obj.