我已經定義了一個成員變量,如下所示。由於變量不會被傳遞,所以我決定在這裏使用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