C++ 根据父级指针删除子级

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)

会起作用吗?如果不是,应该怎么做?

Nat*_*son 6

您需要给 A 一个虚拟析构函数(请参阅此处了解原因):

class A {
    A();
public:
    virtual ~A() = default; 
};
Run Code Online (Sandbox Code Playgroud)

此时调用delete a_pointers[0]将完全破坏b_obj.