23

C++11 の std::shared_ptr<> は一種の bool 演算子を提供します。

operator unspecified-bool-type() const;

( type の暗黙的なキャストによる危険性がoperator bool() constあるため、ストレートアップではありません。)bool

std::weak_ptr<> に同様の演算子がないのはなぜですか? 常にタイピングしていることに気付く

if( !wp.expired() )

入力したいとき

if( wp )

なぜweak_ptrのbool変換がないのですか?

4

1 に答える 1

31

if(!wp.expired())そのステートメントの直後にifポインターが期限切れになる可能性があるため、マルチスレッドコードではほとんどの場合間違ったチェックです。そのweak_ptrため、変換のセマンティクスとして正確にそれがあったとしても、boolとにかく使用されることはありません。

ポインタが生きているかどうかを確認したい場合はlock、取得した を使用して確認しshared_ptrます。

ポインターが死んでいるかどうかを知りたい場合は、 を使用しますexpired

ご覧のとおり、ブール変換を提供しても意味がありません。についてshared_ptrは、完全にそうです。ところで、変換演算子はexplicit operator bool() const noexcept;C++11 にあります。

于 2012-04-23T15:21:40.893 に答える