2016-11-29 11 views
3

std::shared_ptrがnullかどうかを確認しようとしています。スマートポインタがヌルかどうかをテストするための推奨方法はありますか?

std::shared_ptr<int> p; 
if (!p) { // method 1 } 
if (p == nullptr) { // method 2 } 
+0

違いはありませんでしょう。 if(p.get()ではない) –

+0

'if(p.get()== nullptr)'はどうでしょうか? –

+0

違いはありません。 1つはタイピングがずっと少ないです。 – Galik

答えて

7

を行うとの違いは、

std::shared_ptr<int> p; 
if (!p) { // method 1 } 
if (p == nullptr) { // method 2 } 

はいいえ、違いありませんやっとの違いはそこにあるあります。どちらの操作にもproperly defined overloadがあります。

別の同等は全く

if(p.get() == nullptr) 
+0

理論的には、第3のものは、nullptrと比較する前に 'T * 'を得なければならないので、比較的狂った状況ではもっと複雑になる可能性があります。 'T *'を取得する前にvtableメソッドを呼び出さなければならないタイプ消去スマートポインタを想像してください。値がnullの場合、nullptr vtableが保証されます。方法1と2は '.get()'がnullをチェックするだけであることを知りませんので、可能な抽出 - 'T *'を短絡できますが、3はできません。 – Yakk

関連する問題