RAII和虚拟析构函数

时间:2015-07-16 19:51:00

标签: c++

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

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

子课程

class B: public A{};
class C: public A{};

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

vector<A*> Pntr;

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

1 个答案:

答案 0 :(得分:10)

  

然而RAII不适用于虚拟析构函数。

当然可以。析构函数的virtual - 并不重要。你只需要实际调用它。当原始指针超出范围时,它们不会破坏它们指向的对象。这是unique_ptr的用途:

std::vector<std::unique_ptr<A>> pointers;

当该向量超出范围时,所有unique_ptr<A>都将被销毁,这将delete它们拥有的所有底层原始指针,这将调用{的析构函数{1}}或B(或......)视情况而定,释放所有内存。

旁注:C错了;你不能拥有虚拟构造函数。