次のようにメンバー変数を定義しました。変数は渡されないため、ここでは shared_ptr ではなく 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();
これよりも良い解決策はありますか?