所以我正在从一个"拥有"的对象模型迁移到我正在做的项目中的"托管"对象模型.目前要做一件新的事情
Thing *thing = new Thing();
Run Code Online (Sandbox Code Playgroud)
并摆脱它并摧毁它所有者
delete thing
Run Code Online (Sandbox Code Playgroud)
现在有很多"删除东西",其中很多都是从Thing指针的超类删除,因为超类有一个虚拟析构函数.
现在在托管模型中有一个带有虚拟析构函数的基类,管理器将删除它.用户应该在其上调用"release"而不是删除.
所以我想在编译时以某种方式拒绝"删除东西"作为编译时错误.由于基础上的虚拟析构函数,使析构函数"受保护"似乎不起作用.它至少需要保护子类(我认为).
有人有主意吗?
您需要在基础和子类上保护析构函数.它应该工作正常.
例如,下面的代码会为两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)