C++构造函数中转而调用其它构造函数的三种方法

C++构造函数中转而调用其它构造函数的三种方法

0x00 在初始化列表中调调用另一个构造函数

1
2
3
/**
* warning: delegating constructors only available with -std=c++11 or -std=gnu++11
*/
1
Teacher::Teacher(): Teacher("unknown",30) {}

0x01 使用this指针显式调用构造函数

1
2
3
4
5
6
/**
* 经过实践发现g++似乎不能这么用
* error: cannot call constructor ‘Teacher::Teacher’ directly
* 参见:
* https://stackoverflow.com/questions/9253619/c-cannot-call-constructor-directly
*/
1
2
3
Teacher::Teacher() {
this->Teacher::Teacher("unknown",30);//此方法必须加上作用域
}

0x02 原始内存覆盖

1
2
3
4
5
/**
* 使用new (void*p) ClassType(param...),这种语句的意思是不重新分配内存,而是直接覆盖在原内存上。
* 参见:
* https://www.jianshu.com/p/4af119c44086
*/
1
2
3
Teacher::Teacher():m_iMaxStudentNum(30) {
new (this) Teacher("unknown",30);
}