CEffective读书笔记条款6
条款 6:析构函数里对指针成员调用 delete
说起来很简单,现实中有人会这样---new时在构造函数中,delete时想在哪里就哪里,他们觉得自己只要new和delete配套使用了就万事大吉了。他们应该是没有考虑到一种情况:你的同事看你的代码时,正常逻辑是看析构函数,发现没有对应指针成员的delete语句时,会加上的。这样你的代码中就出现了多此delete的情况了。别人都是按套路来的,你要是没有套路也会有问题的。 //类的指针类型的成员变量m_name,如果是在构造函数中初始化了,最好是在析构函数中调用delete[] class Person() { private: Person(); ~Person(); char* m_name; }; //cpp文件 Person::Person() { m_name = new char[1024]; } Person::~Person() { delete[] m_name; m_name = nullptr; }
然而,这个类经过维护、升级后,情况就会变得困难了,因为对类的代码进行修改的程序员不一定就是最早设计类的人。
增加一个指针成员意味着几乎都要进行下面的工作:
1.在每个构造函数里对指针进行初始化。有些情况下指针可以被初始化为 0(即空指针)。
2.删除现有的内存,通过赋值操作符分配给指针新的内存。
3.在析构函数里删除指针。
1和2没有处理好,问题会出现得很快,编译器会提醒你。
但是3,如果在析构函数里没有删除指针,它不会表现出很明显的外部症状。相
反,它可能只是表现为一点微小的内存泄露,并且不断增长,最后吞噬了你的
地址空间,导致程序夭折。
另外,删除空指针是安全的(因为它什么也没做)。所以,在写构造函数、赋值操作符等等时,指针要么指向有效的内存,要么就指向空,这样析构函数里就可以只用简单地使用 delete ,而不用担心他们是不是被 new 过。
当然对本条款的使用也不要绝对。例如,你当然不会用 delete 删除一个没有用 new 来初始化的指针,而且,就像用智能指针对象时不用劳你去删除一样,你也永远不会去删除一个传递给你的指针。换句话说,只有类成员最初用了 new,才能在析构函数中对应使用 delete 。 delete只针对new之后的内存,如果指针指向的是静态区或栈区,你用delete去处理这个指针,直接会宕机的。(内存四区相关知识)
说到智能指针,后面介绍一种避免必须删除指针成员的方法,即把这些成员变量用智能指针对象来代替,比如 C++标准库里的 auto_ptr。想知道它是如何工作,看看条款 M9 和 M10。
这样的丰田威兰达你喜欢吗?威兰达速不可挡丰田汽车在国内的知名度和销量一直是国内名列前茅的,主要就是因为丰田车的质量稳定又可靠。众所周知,国内许多消费者更喜欢SUV车型,就好比欧洲人喜欢开旅行车一样,动力总成
物联网如何改变服务业物联网不仅适用于工业企业或智能家居爱好者。这场技术革命的优势设备共享实时数据非常适合应对服务提供商的挑战,从餐馆到汽车商店再到宠物美容师。其中最主要的挑战是不断变化的客户期望。今天
青春不等人走过邂逅曾经的港湾记忆的丛林愿在天涯海角漂泊不想成为过客的过客不经意间你的绽放触动了我的梦明月何时有把酒问青天不知天上宫阙今夕是何年苍天依旧江山美如画红叶染天际清风送回忆那年春花秋
最接地气的演唱会全民互动欢唱类节目欢唱大篷车已开播。制作人采取新的形式,驾驶大篷车去往城市街道与田间地头,做最接地气的演唱会。舞台简单,便捷,还可以移动以往的演唱会,都是有公司专门组织,舞台设置都
千年古镇一日游,玩转启封故园开封历经两千多年的演变形成了驰名中外的八朝古都汴梁,而它早期的名字不叫开封,而叫汴梁汴京等名字。距城市不远30公里外,有一座千年名镇朱仙镇。朱仙镇起源于春秋战国时期帮信陵君窃符救赵
周年庆丨七年同庆,公益先行原子同学7年前,阿童木正式成立。2020年,我们以原子同学AtomSTEM的升级面貌继续奋进在科创教育领域道路上。回首这7年,原子同学很幸运地被各位学生家长们所熟知爱戴。我们在感受新老学员
2021!探索宇宙2021年不仅是十四五开局第一年更是航天科技迈进年!人类不断探索深邃的宇宙,这次我们的目标是有着火焰般的颜色的星球火星,又被成为红色星球,是目前为止发现的所有行星中与地球最为相似的
盘点丨历届高考中的编程题,今年又出现啦!原子同学全国万众瞩目的的高考又在熙熙攘攘中暂时落下帷幕在2021年高考科目中连续出现在高考数学卷的编程题转!正!啦!成为高考的必考科目之一2021年浙江高考编程题编程,不仅仅只出现在今年浙
周朝阳容易接受新事物和认知无关上学的时候,填写个人简历或者求职推荐,老师告诉我们,有特长就写特长,有兴趣就写兴趣,没特长没兴趣的就写容易接受新鲜事物。现实生活中,对某一个领域特别的熟悉,不乏有人过来问一些小白的
周朝阳赚快钱的创业项目,千万不要搞今天付费群里有人提醒,在某鱼卖网课的店被律师发函,这一块牵扯到知识版权,忍不住想上来说两句。我一直混站长圈的,对版权意识始终保持着警惕的,身边的朋友有遇到被告的,比如网站使用的字体
周朝阳如何改掉坏习惯,比如打游戏中国那家大的互联网公司,新闻很多,每次我们在群里面讨论的时候褒贬不一,有人认为他们家的游戏对小孩伤害的太大了,其实游戏对年轻人何尝不是如此呢。我见过很多年轻人,上班了当然不敢打游戏