RAII和虚拟析构函数

Jos*_*osh 0 c++

我创建了一个抽象类,然后创建了继承此抽象类的子类.

class A{
public:
     virtual A* clone() const = 0;
     virtual A* create() const = 0;
    ~virtual A(){};
    // etc.
private:
    A(){};
};
Run Code Online (Sandbox Code Playgroud)

儿童班

class B: public A{};
class C: public A{};
Run Code Online (Sandbox Code Playgroud)

我现在可以使用类型A的指针填充这些类的向量,并通过多态访问子类.

vector<A*> Pntr;
Run Code Online (Sandbox Code Playgroud)

问题是我希望每个子类都能处理自己的内存释放,有点像RAII.但是,RAII不适用于虚拟析构函数.有没有办法可以做到这一点?

Bar*_*rry 10

但是,RAII不适用于虚拟析构函数.

当然可以.该virtual析构函数的-ness无所谓.你只需要实际调用它.当原始指针超出范围时,它们不会破坏它们指向的对象.这unique_ptr是为了:

std::vector<std::unique_ptr<A>> pointers;
Run Code Online (Sandbox Code Playgroud)

当该向量超出范围时,所有unique_ptr<A>的将被销毁,这将delete是他们拥有的所有底层原始指针,它将适当地调用BC(或......)的析构函数并释放所有内存.

旁注:virtual A()错了; 你不能拥有虚拟构造函数.