设为首页 加入收藏

TOP

为什么有时类的析构函数要定义为protected呢?
2014-11-23 23:24:14 来源: 作者: 【 】 浏览:1
Tags:为什么 有时 函数 定义 protected

对于堆中的对象,我们通常用new/delete来创建/销毁。当调用new时,它会自动去调用相应类的构造函数。同样,当调用delete时,它会自动去调用相应类的析构函数。当我们在栈中产生对象时,前面说的过程是自动完成的。即:不需要我们显式调用new/delete。这里有个前提:类的构造/析构都是public的。

然而,当我们想禁止在栈中产生对象时,如何来实现呢?

将构造函数设为private行吗?no!这样对象虽然不能在栈中产生,但同样也不能在堆中产生了。

将析构函数设为private行吗?bad!这样虽然限制了栈对象,但同时也限制了继承。

将析构函数设为protected行吗?yes!

例如:

class A

{  

protected:   

A() { }

   ~A() { }  

public:   

static A* create()

  {    return new A() ;//调用保护的构造函数   }   

void destroy()   

{    delete this ;//调用保护的析构函数   }

};

我们可以这样来使用它:

A* pa= A::create();

pa->destroy() ;

摘自:huzzyy的专栏

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇正则表达式c语言经典实现 下一篇玩儿转C语言:符号序列

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: