auto_ptr を引数としてコンストラクターに渡せるようにしたい。しかし、新しいオブジェクトを作成できなかった場合 (おそらくメモリがない bcoz)、元の 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 が作成されず、オブジェクトを作成せずに new 演算子が返されたときに autop1 値が破棄されました。autop1 にアクセスしようとすると、セグ フォールトが発生します。この問題を回避する良い方法は何ですか。新しいオブジェクトが作成され、所有権がそのメンバー変数に渡された場合は問題ありません。新しい B オブジェクトを作成できず、autop2 が NULL になる場合、foo() で autop1 を使用できるようにしたいと考えています。