防止为类和派生类分配堆栈

Prevent stack allocation for a class AND for derived classes

本文关键字:分配 堆栈 派生      更新时间:2023-10-16

是否有一种方法可以设计一个类,它和它的后代都不能自动分配(在堆栈上),但只能动态分配(在堆中)?

我有一个由场景树表示的3D场景,每个对象都有一个父对象和一些子对象。所有场景对象都继承自一些基类SceneObject。我想使它不可能在堆栈上分配这样的对象。

我所知道的为类实现这一点的唯一方法是声明一个受保护的构造函数并提供一个工厂(请参阅是否有可能防止对象的堆栈分配并只允许使用'new'?)这确实像我希望的那样对类起作用,但对它的后代不起作用。派生类的作者需要显式地将构造函数声明为非公共的,而我没有办法控制它,因此提供了出错的可能性。

有没有可能实现我想要的?可能会有妥协吗?

没有。

你可以显式地重写operator new,或者将你链接到的答案与模板混合,但否则你就完蛋了。

我猜你的全部问题都涉及到资源管理;如果是这种情况,请查看"三原则";如果你的类有一个用户定义的析构函数、复制构造函数或复制赋值(operator=(const Something&)),你可能需要这三个。

我知道这样做的唯一方法是您的链接答案如何说-将类的构造函数声明为private,因此除了类本身之外没有人可以创建它的实例,然后提供public静态方法,该方法在堆上创建类的实例。