Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ RAII与虚拟析构函数_C++ - Fatal编程技术网

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;