6

std ::weak_ptrのoperator<に関する説明を読んだ後、std::weak_ptrの制御ブロックを使用するようにstd::hashを定義しても機能しない理由がわかりません。また、これが標準化委員会によって無視されたとは信じられません。誰かがそのトピックに関連する議論を読んだことがありますか?

編集:演算子に関するディスカッション<std :: weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

4

2 に答える 2

3

歴史はある程度知っている。後で読むべき別の論文もあります。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2637.pdf

そして、この後の論文が実際に現在の草案にあるものだと思います。要約すると、shared_ptr には値ベースの operator<()所有権ベースのメンバー関数 owner_before があります。weak_ptr には後者しかありません。

私の推測では、weak_ptr のハッシュ サポートが単純に削除されたということです。私の知る限り、weak_ptr のハッシュ サポートを提案した人はいません。C++0x を標準化する際には非常に多くの問題がありましたが、問題に取り組むための時間とリソースは限られており、間違いや欠けている部分があることは間違いありません。

また、weak_ptr のハッシュ サポートを追加するには、owner_before と同様に行う必要があると思います。メンバー関数 owner_hash を shared_ptr と weak_ptr の両方に追加します。C++0x でこれを行うには遅すぎると思いますが、これはもっともらしい TR2 提案のようです。

于 2011-01-23T19:17:25.640 に答える