我创建了一个抽象类,然后创建了继承此抽象类的子类.
class A{
public:
virtual A* clone() const = 0;
virtual A* create() const = 0;
~virtual A(){};
// etc.
private:
A(){};
};
Run Code Online (Sandbox Code Playgroud)
儿童班
class B: public A{};
class C: public A{};
Run Code Online (Sandbox Code Playgroud)
我现在可以使用类型A的指针填充这些类的向量,并通过多态访问子类.
vector<A*> Pntr;
Run Code Online (Sandbox Code Playgroud)
问题是我希望每个子类都能处理自己的内存释放,有点像RAII.但是,RAII不适用于虚拟析构函数.有没有办法可以做到这一点?
Bar*_*rry 10
但是,RAII不适用于虚拟析构函数.
当然可以.该virtual析构函数的-ness无所谓.你只需要实际调用它.当原始指针超出范围时,它们不会破坏它们指向的对象.这unique_ptr是为了:
std::vector<std::unique_ptr<A>> pointers;
Run Code Online (Sandbox Code Playgroud)
当该向量超出范围时,所有unique_ptr<A>的将被销毁,这将delete是他们拥有的所有底层原始指针,它将适当地调用B或C(或......)的析构函数并释放所有内存.
旁注:virtual A()错了; 你不能拥有虚拟构造函数.
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |