条款04:确定对象被使用前已先被初始化
对于一些对象而言如果不对其某一个数据成员进行初始化,可能会导致不明确的行为,而有些对象则不会,因此最佳的处理办法是永远在使用前进行初始化
#include<iostream>
using namespace std;
class A
{
public:
A(int ,char ,string );
private:
int a;
char c;
string s;
};//赋值
A::A(int a1,char c1,string s1)
{
a=a1;
c=c1;
s=s1;
}
A::A(int a1,char c,string s1):
a(a1),c(c1),s(s1)
{}//初始化
初始化和赋值最终的结果相同,不同的是初始化动作发生在构造函数本体之前,发生在这些成员的缺省构造函数被自调用之时,节省了许多额外的开销,提高了效率。
c++有着十分固定的“成员初始化次序”。使得,次序总是相同:base class更早于其derived class 被初始化,而析构函数正好相反。