http://blog.csdn.net/mougaidong/article/details/6900425
class OnlyHeap
{
public:
OnlyHeap();
private:
~OnlyHeap();
};
class OnlyStack
{
public:
OnlyStack();
private:
void* operator new(size_t);
void operator delete(void*);
};
但是这个有一个漏洞,限定栈创建的对象可以通过placement new来在堆中创建出来。
OnlyStack o;/* 阻止不了在数据段上创建对象 */
int main()
{
void *p1 = ::operator new(sizeof(OnlyStack));
OnlyStack *p = ::new(p1) OnlyStack; /* 阻止不了在堆上创建对象 */
p->OnlyStack::~OnlyStack();
::operator delete(p1);
return 0;
}
1、解决第一个破绽,有码友提出定义宏 :
#define Only_Stack auto OnlyStack
2、解决第二个问题,也有人提出,把各种内存分配函数都给重定义了,这显然影响了其他代码使用这些常用的函数。