如何在类层次结构中隐藏"删除"?

Pet*_*ard 3 c++

所以我正在从一个"拥有"的对象模型迁移到我正在做的项目中的"托管"对象模型.目前要做一件新的事情

Thing *thing = new Thing();
Run Code Online (Sandbox Code Playgroud)

并摆脱它并摧毁它所有者

delete thing
Run Code Online (Sandbox Code Playgroud)

现在有很多"删除东西",其中很多都是从Thing指针的超类删除,因为超类有一个虚拟析构函数.

现在在托管模型中有一个带有虚拟析构函数的基类,管理器将删除它.用户应该在其上调用"release"而不是删除.

所以我想在编译时以某种方式拒绝"删除东西"作为编译时错误.由于基础上的虚拟析构函数,使析构函数"受保护"似乎不起作用.它至少需要保护子类(我认为).

有人有主意吗?

Tro*_*our 6

您需要在基础和子类上保护析构函数.它应该工作正常.

例如,下面的代码会为两delete行生成编译时错误.

class A
{
protected:
    virtual ~A() {}
};


class B : public A
{
protected:
    virtual ~B() {}
};

int main()
{
    B* b = new B;
    A* a = new B;

    delete b;
    delete a;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)