我想确保我的 RAII 类始终分配在堆栈上。
如何防止通过“new”运算符分配类?
您需要做的就是将类的 new 运算符声明为私有:
class X
{
private:
// Prevent heap allocation
void * operator new (size_t);
void * operator new[] (size_t);
void operator delete (void *);
void operator delete[] (void*);
// ...
// The rest of the implementation for X
// ...
};
将“operator new”设置为私有可有效防止类外部的代码使用“new”创建 X 的实例。
要完成这些操作,您应该隐藏“operator delete”和两个运算符的数组版本。
从 C++11 开始,您还可以显式删除函数:
class X
{
// public, protected, private ... does not matter
static void *operator new (size_t) = delete;
static void *operator new[] (size_t) = delete;
static void operator delete (void*) = delete;
static void operator delete[](void*) = delete;
};
相关问题: 是否可以阻止对象的堆栈分配并仅允许使用“new”启动它? https://stackoverflow.com/questions/124880/is-it-possible-to-prevent-stack-allocation-of-an-object-and-only-allow-it-to-be
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)