zoukankan      html  css  js  c++  java
  • 关于构造和析构的几点拟人化思考

    Zephyr

    1304

    学而不思则罔,思而不学则殆,

    最近对EffectiveC++等书的复习,

    发现体悟良多,

    温故可以知新,古人诚不我欺。

    也是,DesignPatternC++底层等,

    在没有长期使用和大型系统的经历前,

    往日都是小和尚念经,有口无心,

    Inside C++Object所言

    不要靠猜,不要等大师来解决

    想要进阶,

    刨根问底,极致主义精神是必不可少的,

    程序各个模块的生命周期了然于胸,

    它们何时出生何时离去,它们到底做了什么?

    这似乎是最简单的构造,析构函数,

    但惭愧地发现自己亦有不甚透彻的点,

    偶然看到一些象征的方式似乎很利于体悟,

    为求之甚解,从最开始的地方开始,

    略做总结一二:

    1,如果说一个对象,相当于一个人,

    构造函数,就相当于他的出生,人的基本出生状况(生理条件,Component)都是一样的,

    所以,可以有多个构造函数的重载,但是基本的条件都是一样“一无所有”的(数据初始化、指针设NULL);

    2,人有生,亦有死,想到这些,我们不必怅然,反而应该豁达,因为无论在漫漫人生路上我们获得了什么,最后也是一无所有的走的,尤其是赚到的金钱财富,享有的物质,民政部一定会把你注销户头(析构,必须清理掉所有的数据,尤其是申请的堆内存,并销毁指针设NULL),什么也带不到天国的(要不就是MemLeak);

    3,话虽如此,人人生来在时间生命上自由平等,但是毕竟家庭,环境不同(有不同的构造函数),生来的贵贱贫富之分是在所难免的,但是王侯将相,宁有种乎?难道人的所有就只在出生一刻决定了么?!(构造时),不,还是有逆袭的机会的,所以,除了第一点提到的一无所有,所有的由外部参数决定的属性构造,我们都应将其独立地抽出为方法,如IniItems,IniMoney,以待不日之需;

    4,一个人绝无可能使自己出生,但是悲伤的情绪还是会无情地将人打败,他有自杀的能力(对象不可以显式调用构造函数,但是可以调用析构函数),而且,考虑到有时候并非自杀,而是可能掉落峡谷,脱胎换骨,所以析构函数我们也应抽出为单独的方法,如CleanUpMoneyCleanUpItemsIniMoney可能只需要往上加钱就行(除非从高帅富坠落人间,Clean成破产),但是IniItems很可能会需要将原先的属性清除(IniItems先需要CleanUpItems);

    5,正好展开来,对象指针和对象数据指针二者一定要清晰地分离,咋一看很简单,但现实往往却容易混淆,如高帅富坠落后因为由奢入简难而刷爆n张信用卡,然后就去delete自己,这不科学吧?!前面还有草莓味的妹子啊,决不能放弃!对象中数据不能影响到对象指针的任何可操作性;

    6,人生在世,难免会遇到各种各样的人和事,靠谱的不靠谱的也很多,“你人生中最惊险的记忆是什么?”“额,二十多年前,后便追了几亿个弟兄,差点跑输了”...每当生活不如意时,时刻想想,我这么艰难的一刻都熬过来了,后面的各种属性方法,尤其是各种NULL野指针,岂不是责无旁贷?!Robustness鲁棒性一定要够!构造,析构时,一定要考虑到各种突发的情况;

    7,声明时直接赋值,查看汇编代码,会发现直接调用的的是拷贝构造函数,而非重载的 =操作符;确切地说法是复制初始化赋值初始化展开来说,赋值初始化确切地说不属于构造函数范围,构造函数在编译级上我们就不能不能显式调用,但在成员函数中我们可以,但是自我规定,同样不要调用(如对象之前如果申请了一块内存,直接调用构造函数时,指针会被直接设NULL,而申请的内存却未释放),可以是复制初始化的构造函数(刚产生的对象)内部再去调用赋值初始化(已产生、刚产生的对象调用),这样之于人是一种专注的态度,专注于自身业务,最求最明晰的责任范畴,用于类,则可以避免很多问题。

     

  • 相关阅读:
    【工具类】图片压缩工具类,可压缩jpg, png等图片
    【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
    【Nginx异常】[error] 4236#29900: OpenEvent(“Global gx_reload_27128“) failed (5: Access is denied)
    【Nginx异常】Nginx启动一闪而过没反应,Nginx双击打开后,没有启动成功,也没有进程,且127.0.0.1:8080访问不到
    开启vue-element-ui打包生成报告
    Cas 5.2.x 使用 实现SSO单点登录的问题
    springmvc在使用@ModelAttribute注解获取Request和Response会产生线程并发不安全问题
    企业微信会话存档开发与问题
    高手怎么查找CPU过高的Java代码。具体到行
    ubuntu中清除开始菜单中的应用图标
  • 原文地址:https://www.cnblogs.com/Zephyroal/p/3043880.html
Copyright © 2011-2022 走看看