我不确定这是否可能。
我需要防止从 X 派生的所有类被实例化为本地堆栈或成员变量。我使他们所有的析构函数都受到保护,就外部范围而言,这起到了作用。但是,我也需要防止它们被自己实例化。我的意思是,如果 Y 具有 Z 类型的成员变量或在其方法中实例化 Z 类型的局部变量,则不会削减它。
现在我可以在层次结构树的所有叶子中创建私有析构函数,但问题是每个 not 都应该被允许成为(堆)变量。在 X <- Y <- Z 的情况下,所有三个都应该被实例化,但 X 和 Y 不能有私有析构函数。此外,即使这样也不能阻止我在 Z 的方法中使用 Z 类型的局部变量。
我想通过将它们的构造函数设为私有并将 operator new 添加为所有它们的朋友就可以了,但这是很多额外的工作(因为我们使用了 operator new 的多个版本)并且层次结构很大。
那么,有没有办法让这些对象的堆栈实例化(最好)编译时或运行时错误,而不诉诸私有构造函数朋友新方式?
<edit> 问题是这个项目的以前的程序员写了大量的代码,这个层次结构中的所有类都有非常复杂的析构函数。而且,作者在这些 destructros 中不加选择地调用了虚拟方法,这导致了许多(对他们而言)无法解释的崩溃和内存损坏。现在将所有析构函数转换为obj->Release()
模式,并且在我拥有的最顶层 Release 中delete this
。显然这不适用于堆栈对象,现在我介绍了一些我自己的崩溃。另外我的时间有点短,运行/等待崩溃/修复这个特定的崩溃方法非常慢</edit>