C++ 是否可以重写MyClass*的析构函数(而不是MyClass)?
例如,我有一个具有不同容器的类来保存由new operator创建的MyClass对象:C++ 是否可以重写MyClass*的析构函数(而不是MyClass)?,c++,memory-management,destructor,C++,Memory Management,Destructor,例如,我有一个具有不同容器的类来保存由new operator创建的MyClass对象: class A{ MyClass* m; vector<MyClass*> vm; vector<vector<MyClass> > vvm; pair<int,MyClass*> pim; }; 要替换自定义析构函数,请执行以下操作: ~A(){ delete m; for(MyClass* m : this
class A{
MyClass* m;
vector<MyClass*> vm;
vector<vector<MyClass> > vvm;
pair<int,MyClass*> pim;
};
要替换自定义析构函数,请执行以下操作:
~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;
}
~A(){
删除m;
对于(MyClass*m:此->虚拟机){
删除m;
}
对于(向量vm:this->vvm){
对于(MyClass*m:此->虚拟机){
删除m;
}
}
删除pim.second;
}
因此,当添加一种容器来保存MyClass的引用时,我不需要添加新代码?如果您可以自由地使用
std::shared_ptr
而不是原始指针,您可以简化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;
};
A类{
公众:
~A(){}//这就是你所需要的。你甚至可以忽略它。
私人:
std::共享的ptr m;
向量机;
向量vvm;
配对pim;
};
在外部创建MyClass的实例,您希望在删除某个实例时删除MyClass的实例吗
若MyClass实例的生命周期依赖于
甲级{
私人:
MyClass m;
}
或者如果没有,则删除外部MyClass的实例。如果您使用
std::share_ptr
,您可以使用A::~A()。虽然它不是std::shared_ptr
?@CommanderBubble,是的,它是shared_ptr
。请注意,提供显式析构函数会抑制隐式移动构造函数和移动赋值运算符的生成,因此如果您确实需要这些函数,那么实际上最好省略析构函数
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;
};