因此,我正在从一个“拥有”对象模型迁移到我正在执行的项目中的“受管理”对象模型。目前做一个新的东西一个不如何隐藏类层次结构中的“删除”?
Thing *thing = new Thing();
,并摆脱它,破坏它的主人并
delete thing
现在有很多的“删除事” S那里,很多的他们正从 Thing指针的超类中删除,因为超类具有虚拟析构函数。
现在在托管模型中有一个带有虚拟析构函数的基类,管理员将删除该基类。用户应该调用“释放”而不是删除。
所以我想在编译时以某种方式拒绝“删除东西”作为编译时错误。 由于基础上的虚拟析构函数使析构函数“保护”似乎不起作用。它至少需要保护子类(我认为)。
任何人有任何想法?
此,如果它通过一个虚拟的析构函数称为将无法正常工作。 – coppro 2009-11-02 21:59:03
使析构函数为私有且虚拟的,提供空的析构函数体。让经理类成为层次结构基础的朋友。这样,子类可以通过基指针在头上进行管理,但只能由管理者进行管理。 – 2009-11-02 22:02:03
如果你在你的基类中这样做,它会工作。但是,它也会限制'new'的使用(因为'new'需要调用'operator delete'是'operator new'成功,但是构造函数被抛出),所以你需要使用'friend'和可能的工厂方法来解决这个问题。 – 2009-11-02 22:06:44