构造函数中的成员初始化的执行效率

来源:互联网 发布:中国象棋ai算法 html5 编辑:程序博客网 时间:2024/05/18 00:34

   以前的惯用的构造函数的写法

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 对象会在 该函数被调用期间 首次遇上对象的定义式 时被初始化。

 
原创粉丝点击