3
我想知道在我的類的構造函數中初始化auto_ptr成員的正確方法。 我的班級有2個(或更多)不同類型的auto_ptr實例。其中一個的初始化取決於第一個初始化的結果。auto_ptr構造函數體中的成員初始化(不在初始化程序列表中)
爲了澄清,這是我在做什麼:
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,並在初始化它時將它的託管實例的所有權轉移給類成員。
這樣做的正確方法還是應該使用更好/更安全?
非常感謝。
我需要儘可能多地生成代碼。這是針對嵌入式設備的,我認爲大多數嵌入式編譯器都不兼容C++ 11。 我試圖避免內存泄漏,如果在構造函數內引發一些異常。 – Marcus
@Marcus:然後,我仍然會看看Boost.Move並編寫自己的'unique_ptr',但*請*只是取消'auto_ptr'。 – Xeo
我不認爲我可以使用C++ 11或Boost。 C++ 11在嵌入式系統中並不流行。 Boost可能也是一個問題。我認爲將圖書館集成到其他環境/平臺時可能會受到限制。 – Marcus