是否可以覆盖 MyClass*(不是 MyClass)的析构函数?
Is it possible to override the destructor of MyClass* (not MyClass)?
例如,我有一个 class 具有不同的容器来保存由 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;
};
在外面创建了一个MyClass的实例,你希望在删除A的实例的同时删除MyClass的实例?
如果MyClass实例的生命周期依赖于A,那么就
class一个{
私人的:
我的班级米;
}
或者如果不是,则删除外部的MyClass实例。
例如,我有一个 class 具有不同的容器来保存由 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;
};
在外面创建了一个MyClass的实例,你希望在删除A的实例的同时删除MyClass的实例?
如果MyClass实例的生命周期依赖于A,那么就
class一个{
私人的:
我的班级米;
}
或者如果不是,则删除外部的MyClass实例。