2017-01-25 7 views
1
int a = 1; 

int* w = &a; 
std::unique_ptr<int> v(new int(a)); 

cout << "*w: " << *w << endl;// this works 
cout << "*v: " << *v << endl;// this works 

cout << "w: " << w << endl; // this works 
cout << "v: " << v << endl; // this doesnt work 
cout << "v: " << v.get() << endl; // this works 

私はユニークなポインタの構成は普通のものと同じだと思っていました。 しかし、私は生の定義された名前でこのポインタのアドレスを取得しようとすると、 "この演算子に一致する演算子がない"というunique_pointerのエラーを示します。 v.get()メソッドのみで動作しますunique_ptrとノーマルポインタが一致しない

何が欠けていますか?

+1

"ユニークポインタ"は、名前のポインタのみです。管理するオブジェクトにアクセスするためのポインタのような構文を使用できるように、いくつかのオーバーロードされた演算子があります。 – molbdnilo

答えて

3

問題は、std::unique_ptrオブジェクトを受け取るオーバーロードされたoperator<<関数がないことです。

非常に少数の場合を除いて(ほとんどの場合はデバッグの目的以外で)印刷ポインターが役に立たないことが多いため、スマートポインタのオーバーロードは一般的には不要です(operator<<)。

スマートポインタを印刷することを習慣にしている場合(私は理由は分かりませんが)、自分の過負荷を簡単に追加できます。

関連する問題