先上结论
使用初始化列表主要基于性能问题。
- 对于内置类型,初始化列表与构造函数几乎无差异
- 对于类类型(特别是复杂类型),由于使用初始化列表少调用了一次默认构造函数的过程,对数据密集型的类来说,是非常高效的!。
代码实例
针对于类类型,来证明【初始化列表少调用了一次默认构造函数】
#include <iostream>
using namespace std;
class AA
{
public:
AA()
{
std::cout << "AA: default constructor" << std::endl;
}
AA(const AA&)
{
std::cout << "AA: copy constructor" << std::endl;
}
AA& operator=(const AA&)
{
std::cout << "AA: assign constructor" << std::endl;
return *this;
}
~AA()
{
std::cout << "AA: destructor" << std::endl;
}
};
class BB
{
public:
BB(AA& _a)
#ifdef INITIAL
:a(_a)
{
#else
{
a = _a;
#endif
std::cout << "BB: default constructor" << std::endl;
}
~BB()
{
std::cout << "BB: destructor" << std::endl;
}
private:
AA a;
};
int main() {
AA a;
std::cout << "--------------------------" << std::endl;
BB b(a);
std::cout << "--------------------------" << std::endl;
return 0;
}
执行结果分析(仅如下两行代码修改)
- 编译命令:
g++ .\initial.cpp -o init
- 编译命令:
g++ -DINITIAL .\initial.cpp -o init
由两个图对比可知:
通过初始化构造【类对象】,可以减少1次构造函数