是否可以覆盖 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实例。