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

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

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

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值