如果你想在类中实例化一个对象,而且随着这个类一直存在,就必须考虑这个对象的生命周期,避免超出局部作用域就被销毁了。常见错误:
ClassB.hpp:
class ClassB
{
public:
ClassB(int a)
{
}
}
想在ClassA中用ClassB对象:
#include "ClassB.hpp"
class ClassA
{
public:
ClassA(int a)
{
ClassB obj(a);
}
}
这里obj实例化放在了ClassA的构造函数里,其实ClassA构造完后,obj就被销毁了!
想要obj生命周期和ClassA一样长,就需要把obj作为ClassA的一个成员变量:
#include "ClassB.hpp"
class ClassA
{
public:
ClassA(int a)
{
}
private:
ClassB obj(1);
}
但这又带来了新问题,我们希望obj的构造(初始化)是在ClassA的构造函数内进行,而不是在变量定义时就构造。这对于构造函数有参数的obj尤其重要。有两种解决方案:
一、用std::shared_ptr来实例化对象
当然你也可以直接用原始的指针,但是指针的销毁需要手动处理,所以我们这里用std::shared_ptr智能指针,其对象的析构是随着退出作用域而自动进行的。</