RAII和虚析构函数
RAII and virtual destructors
我创建了一个抽象类,然后创建了继承这个抽象类的子类。
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不能与虚拟析构函数一起工作。我能做到吗?
然而,RAII不能与虚析构函数一起工作。
当然有。析构函数的virtual
-ness无关紧要。你只需要调用它。当原始指针超出作用域时,它们不会破坏它们所指向的对象。这就是unique_ptr
的含义:
std::vector<std::unique_ptr<A>> pointers;
当该向量超出作用域时,所有的unique_ptr<A>
将被销毁,这将delete
所有它们拥有的底层原始指针,这将酌情调用B
或C
(或…)的析构函数并释放所有内存。
旁注:virtual A()
是错误的;不能有虚构造函数。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 我需要知道编译器如何在cpp中使用析构函数
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 析构函数调用
- 通过引用传递-为什么要调用这个析构函数
- 对具有动态分配的内存和析构函数的类对象的引用
- C++使用RAII和抛出的析构函数
- GUI 和 RAII:通过析构函数或窗口关闭、窗口生命周期进行 Cleenup
- 从 RAII 类的析构函数引发异常
- 通过构造函数和析构函数实现 RAII 是否被认为是糟糕的"现代C++"?
- c++ RAII析构函数异常
- RAII和虚析构函数