我创建了一个抽象类,然后创建了继承此抽象类的子类。
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并不适用于虚拟析构函数。有没有办法可以做到这一点?
答案 0 :(得分:10)
然而RAII不适用于虚拟析构函数。
当然可以。析构函数的virtual
- 并不重要。你只需要实际调用它。当原始指针超出范围时,它们不会破坏它们指向的对象。这是unique_ptr
的用途:
std::vector<std::unique_ptr<A>> pointers;
当该向量超出范围时,所有unique_ptr<A>
都将被销毁,这将delete
它们拥有的所有底层原始指针,这将调用{的析构函数{1}}或B
(或......)视情况而定,释放所有内存。
旁注:C
错了;你不能拥有虚拟构造函数。