C++构造函数定义

seg*_*ult 3 c++

这里的所有构造函数方法都做同样的事情.我主要使用method2但今天第一次看到method3.在某些地方看过method1但不知道它们之间的确切差异是什么?哪一个是定义构造函数的最佳方法,为什么?是否涉及任何性能问题?

  1 class Test
  2 {
  3     private:
  4         int a;
  5         char *b;
  6     public:
  7         Test(){};
  8         
  9         // method 1
 10         Test(int &vara, char *& varb) : a(vara), b(varb){}
 11         
 12         // method 2
 13         Test(int &vara, char *& varb)
 14         {
 15             a = vara;
 16             b = varb;
 17         }   
 18         
 19         //method 3
 20         Test(int &vara, char *& varb)
 21         {
 22             this->a = vara;
 23             this->b = varb;
 24         }   
 25         
 26         ~Test(){}
 27 }; 
Run Code Online (Sandbox Code Playgroud)

我在这里使用了简单的字段int和char*,如果我有很多字段或像struct这样的复杂类型会发生什么?

谢谢

小智 14

对于您使用的类型,性能可能没有差异.但是对于非POD数据(带有构造函数的类),形式如下:

Test(int &vara, char *& varb) : a(vara), b(varb){}
Run Code Online (Sandbox Code Playgroud)

将是最有效的.这是因为无论您是否提供初始化列表,都将初始化非POD数据.使用赋值的其他形式将使用命中初始化,然后另一个命中用于赋值.