2011-02-17 120 views
3

我希望能夠將auto_ptr作爲參數傳遞給構造函數。但是,如果無法創建新對象(可能沒有內存),那麼我希望原始auto_ptr能夠保留其值。將auto_ptr作爲參數傳遞給構造函數

例如:當新的操作者,而不創建對象返回

foo (Auto_ptr<A> autop1) { 
    Auto_ptr<B> autop2(new B(10, autop1, 40)); 
    if (!autop2.get()) autop1.callFunc(); >>> segmentation fault; But I want to do this! 
} 

Class B{ 
    public: 
    B(int var1, Auto_ptr<A> var2, int var3): 
     _var1(var1), _var2(var2), _var3(var3){ } 
    private: 
    int _var1, _var3; 
    Auto_ptr<A> _var3; 
} 

在函數foo(),新的對象B不因缺乏存儲器和autop1值創建被破壞。當我們嘗試訪問autop1時,會導致seg故障。 什麼是避免此問題的好方法。它可以,如果一個新的對象被創建,所有權被傳遞給它的成員變量。我希望能夠在foo()中使用autop1,如果無法創建新的B對象並且autop2將具有NULL。

回答

3

您可以通過引用將auto_ptr傳遞給B的構造函數,並且只有在知道構造函數成功時纔將其分配給成員變量。

+0

但是我怎麼會知道如果構造函數會成功。 IMO知道構造函數是否成功的唯一方法是檢查新對象所分配的auto_ptr是否爲空。 是否有任何其他方式來知道構造函數是否成功(當我在構造函數中)? – 2011-02-17 19:57:06

相關問題