2017-03-22 26 views
4

std::shared_ptrは、アドレスを書き出すだけのoperator<<を提供します。 operator>>はなく、コンテンツのないアドレスだけが記録されます。私はそれがどのような場合に有用か疑問に思います。なぜstd :: shared_ptrは演算子<<を提供しますか?

+3

std :: cout << ptrは裸のポインタと似ています – stijn

+6

演算子>>とは何でしょうか?生ポインタはその演算子もサポートしません。 –

+1

@NeilButterworth: 'std :: basic_istream'には、rawを読み込むための[' operator >>(void *&value) '](http://en.cppreference.com/w/cpp/io/basic_istream/operator_gtgt)があります。ポインタ。これは 'shared_ptr'にとって危険かもしれませんが、' shared_ptr'は生のポインタから構築できるので、 'shared_ptr'への直接的な代入のために'演算子 ''を作成することはできません。カスタムディレターが必要な場合は動作しませんが、最初にポインターを読み込んでから新しいshared_ptrを作成して、ディレーターを指定する必要があります。 –

答えて

0

<<が生ポインタ上で行うことが潜在的に有用なことであるためです。それは安全であり、生ポインタがするものであり、ある状況では生ポインタを置き換えるためにshared_ptrが使われることになっています。

コンパイルでは、>>は非常に稀です。未処理のポインタとは異なり、共有ポインタにポインタ値を格納すると、そのポインタの所有権が取得されます。

私はsome_stream >> raw_ptrです。私がptrで何かしない限り、何も間違っていません。少し奇妙ですが、何もすぐに壊れません。

shared_ptrと同じことを行うと、非常に難解な状況でのみ安全になります。そのような状況では、生のポインタを最初に投入して共有ポインタにロードするステップを踏まなければならないということは、あまりにも負担がかかるようには見えません。

関連する問題