当前位置: 首页 > news >正文

菜鸟所不知道的:类的构造函数、析构函数与赋值函数

       构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数就象没有顶盖的下水道那样危险。 
       每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数,如 

A(void); // 缺省的无参数构造函数 
A(const A &a); // 缺省的拷贝构造函数 
~A(void); // 缺省的析构函数 
A & operate =(const A &a); // 缺省的赋值函数
       这不禁让人疑惑,既然能自动生成函数,为什么还要程序员编写? 
原因如下: 
  (1)如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初始化”和“清除”的机会,C++发明人Stroustrup的好心好意白费了。 
  (2)“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘若类中含有指针变量,这两个函数注定将出错。

       对于那些没有吃够苦头的C++程序员,如果他说编写构造函数、析构函数与赋值函数很容易,可以不用动脑筋,表明他的认识还比较肤浅,水平有待于提高。

 

相关文章:

  • 容易忘记;(分号)的地方
  • ForSecondWork-No.4:C/C++笔试题回忆并整理
  • 总结:指针、引用、const
  • C++中指针和引用的区别
  • sizeof总结
  • 简单算法--一个整形数逆序输出后正序输出/一段精彩的递归代码
  • C++ 虚函数若干问题
  • 微软亚太研发集团2013招聘
  • QT 获取系统屏幕分辨率
  • QSS 用法介绍
  • 简单算法--求一个数n的二进制形式的第i位
  • #pragam once 和 #ifndef 预编译头
  • 在线编程学习【优质的资源】
  • QSizeploicy、 QLayout-setSizeConstrain
  • C语言程序员必读的5本书
  • Django 博客开发教程 16 - 统计文章阅读量
  • iOS | NSProxy
  • Java应用性能调优
  • leetcode388. Longest Absolute File Path
  • Sass 快速入门教程
  • tab.js分享及浏览器兼容性问题汇总
  • Vue 2.3、2.4 知识点小结
  • Vue 重置组件到初始状态
  • 从tcpdump抓包看TCP/IP协议
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 解析带emoji和链接的聊天系统消息
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 算法之不定期更新(一)(2018-04-12)
  • No resource identifier found for attribute,RxJava之zip操作符
  • gunicorn工作原理
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (接口封装)
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Windows2003安全设置/维护
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 8.0 中有哪些新的变化?
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET与 java通用的3DES加密解密方法
  • .NET中使用Redis (二)
  • []sim300 GPRS数据收发程序
  • [20171106]配置客户端连接注意.txt
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [jQuery]10 Things I Learned from the jQuery Source
  • [JS] 常用正则表达式集(一)
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [leetcode] 四数之和 M
  • [Linux] 常用命令--版本信息/关机重启/目录/文件操作
  • [NOI2012]迷失游乐园
  • [NOIP2004] 提高组 洛谷P1090 合并果子
  • [office] 怎么在Excel2003菜单栏自定义一个选项卡 #其他#微信#知识分享
  • [Redis]Redis高级特性的配置及使用
  • [Redis]——数据一致性,先操作数据库,还是先更新缓存?