• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

EffectiveC++学习之-------确定对象被使用前被初始化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  “确定对象的使用前被初始化“毫无疑问这和C++的构造函数有关,对内置类型来说在使用前确保被初始化的最好方式就是在定义一个变量的时候给他一个初始值。而对于自定义类型莫过于类的构造函数了,这相对与C来说的话优雅了很多。

  其中将类的成员变量的列表初始化和函数体内初始化,在讲到一下版本的构造函数时个人觉得有点不妥

ABEntry::ABEntry(const std::string& name, const std::string& address,
                                const std::list<PhoneNumber>& phones)
{
    theName = name;
    theAddress = address;
    thePhones = phones;
    numTimesConsulted = 0;
}

在书上提到使用上面的赋值版本的构造函数的时候,首先会调用default构造函数为类的成员进行初始化然后再对他们赋予新值。这样的解释个人觉得又一下几个疑问:

      1. default构造函数何时调用?

                    2.为什么在调用default构造函数后还会调用自己写的构造函数?

                    3. 由谁触发了自己写的构造函数的调用?

相比于先调用default构造函数初始化然后在进行赋值,个人觉得一下的这种解释更可靠一点:在调用赋值版本的构造函数时首先检查函数有没有初始化列表,如果有初始化列表则按照初始化列表中的值进行初始化,如果没有初始化列表,则使用各个成员变量的默认构造函数对自己进行初始化。而后在函数体中调用赋值运算符重载函数进行赋值操作。

上述的初始化方式肯定不是推荐的,因为,这样的构造函数相比与初始化列表方式的构造函数多调用了一个赋值运算符的重载函数。按照性能来说的话这是没有必要的。所以说尽量还是使用初始化列表的方式。

之前发现的一点错误:书上写的是类成员的default构造函数,这样的话也就说和我的理解一样了。之前的博文有误,请谅解


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
c++中清空输入缓冲区的方法(做cf的时候炸了)发布时间:2022-07-13
下一篇:
C#多线程详解发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap