3

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 を使用できるようにしたいと考えています。

4

1 に答える 1

3

参照によってauto_ptr をコンストラクターに渡し、Bコンストラクターが成功することがわかっている場合にのみメンバー変数に割り当てることができます。

于 2011-02-17T09:02:19.173 に答える