自動ポインタ初心者です。私はこれを持っています:
std::auto_ptr<myClass> myPointer(new MyClass(someArg));
myPointer
正常にインスタンス化できるかどうかをテストするにはどうすればよいですか? 私が試したところif (myPointer==NULL)
、コンパイラーはエラーを出しました:
これらのオペランドに一致する演算子「==」はありません。
「インスタンス化」とはどういう意味ですか?
標準に準拠した実装では、 の構築が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
ていることに注意してください。適合する実装にアクセスできる後者を優先してください。
これはどう?
if(myPointer.get()==NULL)
私myPointer.get() == NULL
はあなたが探しているものだと思います。
質問に書いたステートメントを考えると、myPointerが設定されているか、例外がスローされ、例外をキャッチすることが、問題が発生したかどうかを確認する正しい方法です。
いずれの場合も、を呼び出すことで基になるポインタを取得できますauto_ptr::get()
。