码迷,mamicode.com
首页 > 编程语言 > 详细

C++基础知识---构造函数 & 析构函数 & 虚拟析构函数

时间:2014-12-19 20:45:34      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:c++

问题:

          类需要一个无参的构造函数么?

         类需要一个析构函数么?

         类的构造函数需要初始化所有的对象成员么?

 类需要一个虚析构函数么?

有些类需要虚析构函数只是为了声明他们的析构函数是虚的。绝不会用作基类的类是不需要虚析构函数的:任何虚函数只在继承的情况下才有用。假设B为父类,D为子类,B何时需要一个虚析构函数?只有有人肯呢过会对实际指向D类型对象的B*指针执行delete表达式,你就需要给B加上一个虚析构函数,即使B和D都没有虚函数,这也是需要的

B* bp = new D;

Delete bp;   //如果B没有一个虚析构函数,否则调用错误的析构函数

类需要复制构造函数么?

关键在于复制该类的对象是否就相当于复制其数据成员和基类对象。如果不相当,就需要复制构造函数。如果你的类在构造函数内分配资源,则可能需要一个显示的复制构造函数来管理资源。如果一个类中的成员是指针,指向分配的资源,那么这个时候就需要自定义复制构造函数了,否则,会复制成员的隐式定义,就会指向同样的内存;当两个对象被销毁时,会释放同一块内存两次。

如果不想用户能偶复制类的对象,就声明复制构造函数(可能还有赋值操作符)为私有的    

 

你的类需要一个赋值操作符么?

如果需要复制构造函数,同样多半会需要一个赋值操作符。如果不想用户能够设置类中的对象,就将赋值操作符私有化。关于赋值操作符有一篇专门的文章。

记得在复制构造函数和赋值操作符的参数类型中加上const

在一般情况下,在没有指针成员的函数都不用显示定义赋值操作符和赋值构造函数。

我们不能使用数组来存储对象来实现虚拟机制,这是不可能的,最常见的解决方式是使用数据来存储指针,而不是对象本身。

 

什么时候需要虚函数:

如果作为一个父类,父类中有资源管理,那么在析构函数中必须是虚函数。如果在不讨论继承时,那么就没有必要谈论虚函数,只有在发生继承关系的才会由继承的存在。

记住虚函数和非虚函数之间的区别只有在下面这种特定的环境下才会体系出来:当使用一个基类指针或引用来指向或者引用一个派生类对象时。

当下面两件事同时发生时就需要虚析构函数了:

                   有需要析构函数的事情发生。

                   它发生在这样一种上下文中:指向一个基类的指针或者引用都有一个静态类型,并且实际上都指向一个派生类的对象。所以虚函数不是必须的也不是非必须的,这需要自己明白自己的程序做了什么

 

 

其实对于模板,常常被称为静态多态。在容器中操作符[]重载以后,这个操作符返回应该是引用,不然怎么去修改这个值?

 

 

 

C++基础知识---构造函数 & 析构函数 & 虚拟析构函数

标签:c++

原文地址:http://blog.csdn.net/yusiguyuan/article/details/42030823

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!