在线咨询
有事点这里
有事点这里
看不懂这篇文章?联系我们
("麦洛克菲"长期致力于内核安全的推广与普及,我们更专业!)
求职QQ群:223902435。讨论各种求职笔试面试问题
作者:admin 时间:2015-10-31
标题:禁止或允许对象产生于堆中

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