C++注意事项——1、确保每个对象在使用前已被初始化
2014-10-17 15:19
525 查看
C是”接近机器的“,通过一系列函数完成过程的实现。
C++是接近问题的,通过一些了的类实现面向问题的解决方案。其关键思想是多态性。
C++对C语言的扩张最为重要的两个概念是面向对象和泛型编程。
注意事项:
1、确保每个对象在使用前已被初始化
CPerson::CPerson(int age ,string name)
{
m_age=age;
m_name=name;
}
这个只是赋值,而不是初始化,因为C++规定对象中成员变量的初始化发生在对象的构造函数之前。
一个较佳的写法是使用成员初始化列表替换赋值动作。
CPerson::CPerson(int age ,string name)
:m_age(age),m_name(name)
{
}
这个与上一个构造函数最终的结果是一样的,但是效率更高。
使用赋值初始化对象变量时,即第一个构造函数,会在构造函数执行前,调用默认构造函数初始化初始化m_age、m_name。
然后再立刻执行赋值操作。而通过初始化列表,避免了该操作。
有些情况下,即使赋值和初始化列表两者效率一样,也得使用初始化列表。
如果成员变量是const 或reference,他们就一定要初始化,而不能被赋值。
C++有固定的初始化顺序:
基类先于子类初始化;
类中的变量总是以变量声明的顺序进行初始化,和成员初始化列表无关,所以在成员初始化列表中初始化各变量时,最好以声明的次序为顺序。
non-local static对象初始化问题:为了避免在对象初始化之前过早地使用它们,
需要:手动初始化内置类型的对象;或者使用成员初始化列表初始化对象的所有成分。
C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static
对象,而其它static对象称为non-local static对象。
C++是接近问题的,通过一些了的类实现面向问题的解决方案。其关键思想是多态性。
C++对C语言的扩张最为重要的两个概念是面向对象和泛型编程。
注意事项:
1、确保每个对象在使用前已被初始化
CPerson::CPerson(int age ,string name)
{
m_age=age;
m_name=name;
}
这个只是赋值,而不是初始化,因为C++规定对象中成员变量的初始化发生在对象的构造函数之前。
一个较佳的写法是使用成员初始化列表替换赋值动作。
CPerson::CPerson(int age ,string name)
:m_age(age),m_name(name)
{
}
这个与上一个构造函数最终的结果是一样的,但是效率更高。
使用赋值初始化对象变量时,即第一个构造函数,会在构造函数执行前,调用默认构造函数初始化初始化m_age、m_name。
然后再立刻执行赋值操作。而通过初始化列表,避免了该操作。
有些情况下,即使赋值和初始化列表两者效率一样,也得使用初始化列表。
如果成员变量是const 或reference,他们就一定要初始化,而不能被赋值。
C++有固定的初始化顺序:
基类先于子类初始化;
类中的变量总是以变量声明的顺序进行初始化,和成员初始化列表无关,所以在成员初始化列表中初始化各变量时,最好以声明的次序为顺序。
non-local static对象初始化问题:为了避免在对象初始化之前过早地使用它们,
需要:手动初始化内置类型的对象;或者使用成员初始化列表初始化对象的所有成分。
C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static
对象,而其它static对象称为non-local static对象。
相关文章推荐
- 读书笔记 effective c++ Item 4 确保对象被使用前进行初始化
- C++中指针初始化和使用注意事项
- C++中指针初始化和使用注意事项
- C++ 与“类”有关的注意事项总结(十):类对象数组初始化(三种方法)
- 从Symbian C++到Qt编程的注意事项(1)--CleanupStack与对象树
- Effective C++ (第4项:确保对象在使用前得到初始化)
- [翻译] Effective C++, 3rd Edition, Item 4: 确保 objects(对象)在使用前被初始化
- SharePoint : 使用SPQuery对象时要注意的事项
- 使用SPQuery对象时要注意的事项
- c++中string使用的注意事项
- COM连接点C++客户使用注意事项
- C++中typename关键字的使用方法和注意事项
- C++ typename 关键字的使用方法和注意事项
- C++在android上的使用注意事项
- C++ 与“类”有关的注意事项总结(十二):按成员初始化 与 按成员赋值
- Brew中使用C++需要注意的事项
- 使用C++流对象打开文件的注意事项
- 确保 objects(对象)在使用前被初始化
- 对象析构谈——delete原语以及delete this的使用及注意事项
- 对象析构谈—— delete this 的使用及注意事项