同一个类构造函数之间相互调用导致的异常
错误示例代码
class MyClass {
public:MyClass() { p_ = std::make_shared<int>();}MyClass(int b) b_(b) { MyClass();}
private:int b_;std::shared_ptr<int> p_;
};
- 上面代码在使用MyClass(int b)构造函数实例化对象后,会造成b_初始化了但p_没有初始化。因为,构造函数体内调用 MyClass() 构造函数,实际上是创建了一个临时对象,构造完成后就释放了。
改为正确的调用方法
class MyClass {
public:MyClass() { p_ = std::make_shared<int>();}MyClass(int b) : MyClass(){ b_ = b; }
private:int b_;std::shared_ptr<int> p_;
};