为什么有时类的析构函数要定义为protected呢?
来源:互联网 发布:vscode 绿色版 编辑:程序博客网 时间:2024/05/24 04:01
对于堆中的对象,我们通常用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() ;
0 0
- 为什么有时类的析构函数要定义为protected呢?
- 为什么有时类的析构函数要定义为protected呢?
- 为什么有时类的析构函数要定义为protected呢?
- 为什么有时类的析构函数要定义为protected呢?
- 为什么有时类的析构函数要定义为protected呢?
- C++中为什么有时基类的析构函数必须写为虚函数
- 为什么析构函数要定义为虚函数
- 在C++中,为什么有时析构函数必须写为虚函数
- 为什么基类的析构函数定义为虚函数?
- 为什么基类的析构函数定义为虚函数
- 为什么定义类的时候,一定要让它的析构函数为虚的?
- 为什么定义类的时候,一定要让它的析构函数为虚的?
- 为什么定义类的时候,一定要让它的析构函数为虚的?
- 构造函数定义为private,protected的好处
- 为什么析构函数定义为虚函数
- 构造函数定义为private,protected 与 一道面试题:只能实例化一次的类
- 构造函数为什么不能为虚函数 & 基类的析构函数为什么要为虚函数
- JAVA里面main函数为什么要定义为static的?
- ps -aux 命令详解
- mysql 模拟四
- 利用OpenCV给图像添加标注
- 在Flex4 Spark Application中设置图片背景解决方案汇总
- 关于linux系统下文件安装记录
- 为什么有时类的析构函数要定义为protected呢?
- uva 10361 - Automatic Poetry
- Android基于XMPP Smack openfire 开发的聊天室(七) 【成员状态、自身状态】
- Cocos2d-x笔记 CCHttpCleint网络请求
- Struts2 之拦截器interceptor(1)
- 在openwrt上安装webcam
- 怎样把QString转换为char *或者相反?
- Android开源项目(一)
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作