クラスのコンストラクターでauto_ptrメンバーを初期化する正しい方法を考えています。私のクラスには、異なるタイプの2つ(またはそれ以上)のauto_ptrインスタンスがあります。そして、そのうちの1つの初期化は、最初の初期化の結果に依存します。
明確にするために、これは私がしていることです:
class C1 {
...
}
class C2 {
...
}
class Holder {
private:
auto_ptr<C1> c1;
auto_ptr<C2> c2;
public:
Holder() :
c1(new C1()),
c2(NULL)
{
int x = this->c1->getGeneratedValue1();
int y = this->c1->getGeneratedValue2();
if (x > 0 && y > 0) {
auto_ptr<C2> lC2(new C2(true, 10));
this->c2 = lC2;
} else if (x > 0) {
auto_ptr<C2> lC2(new C2(false, 20));
this->c2 = lC2;
} else if (y > 0) {
auto_ptr<C2> lC2(new C2(false, 30));
this->c2 = lC2;
} else {
auto_ptr<C2> lC2(new C2(false, 0));
this->c2 = lC2;
}
}
};
この例は少し繰り返しですが、2つのauto_ptrインスタンス間の依存関係を強制するためのものです。コンストラクター本体にローカルauto_ptrを作成し、初期化するとすぐに、そのマネージドインスタンスの所有権をクラスメンバーに譲渡することにしました。
それはそれを行う正しい方法ですか、それとも私はより良い/より安全なセモシングを使用する必要がありますか?
どうもありがとう。