C++ RAII与虚拟析构函数
我创建了一个抽象类,然后创建了继承这个抽象类的子类C++ RAII与虚拟析构函数,c++,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的指针用这些类填充向量,并通过多态性访问子类
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;
矢量Pntr;
问题是我希望每个子类处理自己的内存释放,有点像RAII。然而,RAII不使用虚拟析构函数。我有办法做到这一点吗
然而,RAII不使用虚拟析构函数
当然有。析构函数的虚拟性
-ness并不重要。你只需要打电话给它。当原始指针超出范围时,它们不会破坏所指向的对象。这就是为什么:
std::向量指针;
当该向量超出范围时,所有的unique\u ptr
将被销毁,这将删除它们所拥有的所有底层原始指针,这将调用B
或C
(或…)的析构函数(视情况而定),并释放所有内存
旁注:virtuala()
错误;您不能有虚拟构造函数 仅供参考,构造函数不能是虚拟的,只能是方法和析构函数。可能会有所帮助。“我希望每个子类处理自己的内存释放”-这意味着什么?相关:
std::vector<std::unique_ptr<A>> pointers;