我已经定义了一个成员变量,如下所示。由于变量不会被传递,所以我决定在这里使用 scoped_ptr 而不是 shared_ptr。
class ClassName
{
public:
ClassName()
{
Initialize();
}
virtual void Initialize() = 0;
protected:
boost::scoped_ptr<int> m_scpInt;
}
class ClassNameB : public ClassName
{
public:
virtual void Initialize()
{
m_scpInt.reset(new int(100));
}
}
由于 scoped_ptr 的限制,如果我决定稍后推迟初始化变量,我得到的唯一选择就是调用 reset。
Q1> 这是一个好习惯吗?
Q2>否则,有没有更好的解决方案?
谢谢
/// 更新 -1 ///
这是我真正想做的。
我想强制每个派生类定义一个名为 Initialize 的函数,然后该函数又调用函数 InitializeVarA 和 InitializeVarB。正如您所指出的,我们不能在构造函数中调用虚函数。
class ClassName
{
public:
ClassName()
{
}
virtual void Initialize()
{
InitializeVarA();
InitializeVarB();
}
protected:
virtual void InitializeVarA() {}
virtual void InitializeVarB() {}
}
class ClassNameB : public ClassName
{
public:
ClassNameB()
{
}
virtual void Initialize()
{
InitializeVarA();
InitializeVarB();
}
protected:
virtual void InitializeVarA() {}
virtual void InitializeVarB() {}
}
ClassNameB cb;
cb.Initialize();
我有比这更好的解决方案吗?