我已经定义了一个成员变量,如下所示。由于变量不会被传递,所以我决定在这里使用scoped_ptr而不是shared_ptr。推迟boost的初始化:: scoped_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的极限,如果我决定推迟变量的初始化在以后的时间,我得到的唯一的选择是调用复位。
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();
我有比这更好的解决方案吗?
好像'scoped_ptr'是不是真的适合你的正确的事在这种情况下使用。 'std :: unique_ptr'有什么问题? – 2012-08-08 14:50:31