gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:17:31 26 4
gpt4 key购买 nike

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

class A{
MyClass* m;
vector<MyClass*> vm;
vector<vector<MyClass> > vvm;
pair<int,MyClass*> pim;
};

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

~MyClass*(){
delete *this;
}

替换自定义析构函数:

~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;
}

这样当添加一种容器来保存 MyClass 的引用时,我不需要添加新代码?

最佳答案

如果您可以自由使用 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;

};

关于c++ - 是否可以覆盖 MyClass*(不是 MyClass)的析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33602448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com