10

自動ポインタ初心者です。私はこれを持っています:

std::auto_ptr<myClass> myPointer(new MyClass(someArg));

myPointer正常にインスタンス化できるかどうかをテストするにはどうすればよいですか? 私が試したところif (myPointer==NULL)、コンパイラーはエラーを出しました:

これらのオペランドに一致する演算子「==」はありません。

4

5 に答える 5

23

「インスタンス化」とはどういう意味ですか?

標準に準拠した実装では、 の構築がMyClass成功したか、例外がスローされてauto_ptrがスコープ外になります。したがって、あなたが提供した例では、 your で表されるポインターの値を にするauto_ptr ことはできませNULL

NULL(指定子を使用しなくても、(例外をスローする代わりに) 割り当て失敗時に戻ることができる例外サポートなしの実装を使用している可能性がありますが(nothrow)、これは一般的なケースではありません。)


一般的に言えば、ポインタの値を確認できます。あなたが発見std::auto_ptrしたように、operator==.

これを行うにはX* std::auto_ptr<X>::get() const throw()、次のように を使用します。

if (myPointer.get()) {
   // ...
}

std::auto_ptrまた、は C++0x では推奨されておらず、 が推奨されstd::unique_ptrていることに注意してください。適合する実装にアクセスできる後者を優先してください。

于 2011-08-15T20:05:01.387 に答える
5

これはどう?

 if(myPointer.get()==NULL)
于 2011-08-15T20:06:54.553 に答える
4

myPointer.get() == NULLはあなたが探しているものだと思います。

于 2011-08-15T20:06:55.317 に答える
1

質問に書いたステートメントを考えると、myPointerが設定されているか、例外がスローされ、例外をキャッチすることが、問題が発生したかどうかを確認する正しい方法です。

いずれの場合も、を呼び出すことで基になるポインタを取得できますauto_ptr::get()

于 2011-08-15T20:07:48.123 に答える