防止为类和派生类分配堆栈
Prevent stack allocation for a class AND for derived classes
是否有一种方法可以设计一个类,它和它的后代都不能自动分配(在堆栈上),但只能动态分配(在堆中)?
我有一个由场景树表示的3D场景,每个对象都有一个父对象和一些子对象。所有场景对象都继承自一些基类SceneObject
。我想使它不可能在堆栈上分配这样的对象。
我所知道的为类实现这一点的唯一方法是声明一个受保护的构造函数并提供一个工厂(请参阅是否有可能防止对象的堆栈分配并只允许使用'new'?)这确实像我希望的那样对类起作用,但对它的后代不起作用。派生类的作者需要显式地将构造函数声明为非公共的,而我没有办法控制它,因此提供了出错的可能性。
有没有可能实现我想要的?可能会有妥协吗?没有。
你可以显式地重写operator new
,或者将你链接到的答案与模板混合,但否则你就完蛋了。
我猜你的全部问题都涉及到资源管理;如果是这种情况,请查看"三原则";如果你的类有一个用户定义的析构函数、复制构造函数或复制赋值(operator=(const Something&)
),你可能需要这三个。
我知道这样做的唯一方法是您的链接答案如何说-将类的构造函数声明为private
,因此除了类本身之外没有人可以创建它的实例,然后提供public
静态方法,该方法在堆上创建类的实例。
相关文章:
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 从堆栈分配的原始指针构造智能指针
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 巨大的内存分配:堆栈与堆
- 有效地分配堆栈对象(由函数的值返回)到堆?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 为什么分配堆内存比分配堆栈记忆更快
- 安全分配堆栈分配的阵列
- 附加到具有非动态分配堆栈的向量
- 是否随作用域分配和解除分配堆栈帧
- 在执行中脱离堆栈对象的范围之前,请分配堆栈对象
- 全局阵列分配 -- 堆栈或堆
- 如何使新操作员超载以分配堆栈
- 具有类作用域的动态分配堆栈内存
- 如何在 Linux 下为可执行文件分配堆栈
- 内存分配堆栈
- 成员函数内存分配堆栈或堆
- 在 c++ 中重新分配堆栈上的对象
- 防止为类和派生类分配堆栈
- 如何防止msvc++为switch语句过度分配堆栈空间?