effective c++条款4(确定对象被使用前先被初始化)
2017-04-08 22:15
309 查看
确保声明的变量都要先初始化,若不初始化,会产生异常值
![](http://img.blog.csdn.net/20170408215615130?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
初始化的方式有手动初始化或者用input stream初始化
除了内置类型之外,我们写的构造函数也要确保将对象的每个成员初始化
初始化和赋值的区别
![](http://img.blog.csdn.net/20170408220713716?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170408220723420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
一个是用等号,一个是用括号,效果是一样的,但是用括号效率更高
若指定空为初始化实参,可构造一个无参构造函数
![](http://img.blog.csdn.net/20170408221224297?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
赋值和初始化很类似,但是如果成员变量是const或者reference,那么就一定要是用初始化(使用括号),避免这样的问题的方法就是总使用初始化方式。
初始化的顺序是固定的,基类早于派生类被初始化,而类中的成员变量是以声明顺序被初始化的
![](http://img.blog.csdn.net/20170408224902796?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](http://img.blog.csdn.net/20170408223945249?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
除非tfs先于tempdir被初始化,否则构造函数会使用没有初始化的tfs
如何实现呢?
c++对于不同编译单元的non-local-static对象的初始化顺序没有定义
![](http://img.blog.csdn.net/20170408224754737?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzAwNzg5MTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
解决的办法就是让该对象在函数内声明为static,并返回引用。这样就可以用实例确定初始化的顺序。
初始化的方式有手动初始化或者用input stream初始化
除了内置类型之外,我们写的构造函数也要确保将对象的每个成员初始化
初始化和赋值的区别
一个是用等号,一个是用括号,效果是一样的,但是用括号效率更高
若指定空为初始化实参,可构造一个无参构造函数
赋值和初始化很类似,但是如果成员变量是const或者reference,那么就一定要是用初始化(使用括号),避免这样的问题的方法就是总使用初始化方式。
初始化的顺序是固定的,基类早于派生类被初始化,而类中的成员变量是以声明顺序被初始化的
除非tfs先于tempdir被初始化,否则构造函数会使用没有初始化的tfs
如何实现呢?
c++对于不同编译单元的non-local-static对象的初始化顺序没有定义
解决的办法就是让该对象在函数内声明为static,并返回引用。这样就可以用实例确定初始化的顺序。
相关文章推荐
- effective c++条款4-确定对象在使用前被初始化
- 读书笔记_Effective_C++_条款四:确定对象被使用前已先被初始化
- Effective C++条款4:确定对象使用前已被初始化
- effective c++条款04确定对象使用前已经被初始化
- Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
- Effective C++——》条款4:确定对象使用前已先被初始化 .
- Effective C++条款04解读:确定对象被使用之前已先被初始化
- 条款04:确定对象被使用前已先被初始化
- 条款04 确定对象使用前已被初始化
- 条款四 确定对象被使用前已先被初始化
- Effective C++笔记之三确定对象在使用前已初始化
- [Effective C++]条款04:确定对象被使用前已先被初始化
- Effective C++学习4 条款04:确定对象在被使用前以被初始化
- Effective C++:条款04:确定对象被使用前已先被初始化
- 《Effective C++》学习笔记条款04 确定对象被使用前被初始化
- 条款04:确定对象被使用前已先被初始化(Make sure that objects are initialized before they're used.)
- [Effective C++读书笔记]004_条款04_确定对象被使用前已先被初始化
- Effective c++ 学习笔记——条款04:确定对象被使用前已先被初始化
- effective C++ 条款 4:确定对象被使用前已先被初始化
- Effective C++(4) 确定对象被使用前已先被初始化