我想确保我的 RAII 类始终分配在堆栈上。
如何防止通过“new”运算符分配类?
最佳答案
您需要做的就是将类的新运算符声明为私有(private):
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”设为私有(private)可以有效地防止类外的代码使用“new”来创建 X 的实例。
要完成事情,您应该隐藏“运算符删除”和两个运算符的数组版本。
从 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;
};
关于c++ - 如何防止通过 'new' 运算符分配类? (我想确保我的 RAII 类始终分配在堆栈上。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124856/