例如,我有一个具有不同容器的类来保存由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的引用时,我不需要添加新代码吗?
答案 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的实例。