dic*_*oce 15 c++ heap new-operator
我有许多类,我想明确禁止堆分配.本周末我发现我可以声明操作符new private(并且未实现)......果然,当你尝试新的类时,这会导致编译错误......我的问题是:还有更多内容吗?我错过了什么,或者这是做我想要的好方法吗?
#include <stdio.h>
class NotOnTheHeap
{
public:
NotOnTheHeap() : foo( 0 )
{
}
private:
void *operator new( size_t );
void operator delete( void* );
void *operator new[]( size_t );
void operator delete[]( void* );
int foo;
};
class Heapable
{
private:
NotOnTheHeap noth;
};
int main( int argc, char* argv[] )
{
NotOnTheHeap noth;
Heapable* heapable = new Heapable;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
oef*_*efe 11
取决于"明确禁止堆分配"的含义.
如果你只是想阻止在堆上直接分配,即:
NotOnTheHeap *n = new NotOnTheHeap();
Run Code Online (Sandbox Code Playgroud)
它够好了.但它不会阻止您的对象一般存在于堆上.
例如,它不会阻止人们使用std::vector <NotOnTheHeap>,它将从堆中的类中分配对象.
它也不会阻止人们NotOnTheHeap在堆上分配的另一个类中使用as成员变量.
| 归档时间: |
|
| 查看次数: |
4495 次 |
| 最近记录: |