是否可以覆盖MyClass *(而不是MyClass)的析构函数?

时间:2015-11-09 04:16:59

标签: c++ memory-management destructor

例如,我有一个具有不同容器的类来保存由new运算符创建的MyClass对象:

~MyClass*(){
    delete *this;
}

我希望在A被销毁时删除A中的所有MyClass对象,是否可以覆盖MyClass *的析构函数,如:

~A(){
    delete m;
    for(MyClass* m : this->vm){
        delete m;
    }
    for(vector<MyClass*> vm : this->vvm){
        for(MyClass* m : this->vm){
            delete m;
        }
    }
    delete pim.second;
}

替换自定义析构函数:

select y.con, y.grp, x.ind from
(select grp, ind from tmp group by grp, ind) as x
join 
(select con, grp from tmp group by con, grp) as y on y.grp = x.grp
order by y.con, y.grp, x.ind

所以当添加一个容器类型来保存MyClass的引用时,我不需要添加新代码吗?

2 个答案:

答案 0 :(得分:2)

如果您可以自由使用std::shared_ptr<MyClass>而不是原始指针,则可以简化A的析构函数。

class A {

   public:
      ~A() {} // That's all you need. You can even omit it.

   private:
      std::shared_ptr<MyClass> m;
      vector<std::shared_ptr<MyClass>> vm;
      vector<vector<MyClass> > vvm;
      pair<int,std::shared_ptr<MyClass>> pim;

};

答案 1 :(得分:0)

MyClass的一个实例是在外部创建的,你想要在删除A的实例时删除MyClass的实例吗?

如果MyClass实例的生命周期依赖于A,则只需

A级{
私人的:
    MyClass m;
}

或如果没有,则删除外部MyClass的实例。