标题:禁止或允许对象产生于堆中


有时候,需要将对象限制在堆中或者禁止在堆中生成。笔者的一个朋友曾经在面试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; //错误



看文字不过瘾?点击我,进入周哥教IT视频教学
麦洛科菲长期致力于IT安全技术的推广与普及,我们更专业!我们的学员已经广泛就职于BAT360等各大IT互联网公司。详情请参考我们的 业界反馈 《周哥教IT.C语言深学活用》视频

我们的微信公众号,敬请关注