以前的惯用的构造函数的写法
class People
{
private:
string name;
int age;
public:
People(string name, int age)
{
this->name = name;
this->age = age;
}
};
呵呵,没有错误哇,挺好的,可是执行效率下降了许多。最新发现,以上的成员变量的初始化 全是采用的赋值初始化,程序的构造函数有一个default构造函数,自动调用的,问题来了,在进入构造函数体内就自动的调用了这个。
构造函数的写法最好成员初始列这样:
People(string name, int age):name(name), age(age)
{
}
最好这样初始化了,不过也得看情况而定啦,这里调用了拷贝构造函数,如果相应的这个函数如果抛出异常了,那在构造这个新的类的够着函数时问题就复杂了。不过一般这样写没问题。
拷贝构造,赋值构造都得视情况而定!
===================================================================================================================================
嗯,另一个问题,如何保证一个对象调用另外一个对象的时候,该对象是否被初始化了,专业说法是 如何免除“跨编译单元的初始化次序”问题,这里提到了一种采用local static 对象替换 non-local static对象。
FileSystem &tfs()
{
static FileSystem fs;
return fs;
}
如果此时调用这个函数,就不用担心是否要把这个进行初始化了。因为函数内的local static 对象会在 该函数被调用期间 首次遇上对象的定义式 时被初始化。