有时候,需要将对象限制在堆中或者禁止在堆中生成。笔者的一个朋友曾经在面试GOOGLE的时候,曾被问到这个问题。那么应该如何做呢?
1.禁止对象产生于堆中:
在C++里,禁止对象产生于堆里,其实就是禁止对象以new和delete的方式分配和释放。因此:
将new 和delete声明为private权限,禁止被调用即可。
class Demo
{
public:
……
private:
static void *operator new(size_t size);
static void operator delete(void *ptr);
}
Demo *pDemo = new Demo(); //错误
Demo demo; //正确
2.禁止对象产生非堆对象:
在C++里,防止对象产生非堆对象,就是要求对象只能由堆分配和存储。因此:
将析构函数声明为protected或者private权限即可。
class Demo
{
public:
……
protected:
~Demo();
}
Demo *pDemo = new Demo(); //正确
Demo demo; //错误
Copyright 2011-2020 © MallocFree. All rights reserved.