2

この質問は、コンストラクター引数として の有用性について説明した以前の投稿を拡張したものです。boost::shared<T>&

class SomeClass {  
    SomeClass( const boost::shared_ptr<SomeOtherClass>& );  
} 

オファーの代わりに右辺値参照引数はboost::shared_ptr<T>&何か利点がありますか?

class SomeClass {  
    SomeClass( const boost::shared_ptr<SomeOtherClass>&& );  
}    

特に、マルチスレッド設定の場合、shared_ptr型の右辺値参照を持つコンストラクターは、値渡しまたは参照渡しよりも便利ですか?

4

3 に答える 3

1

const右辺値には目的がありません。ただし、スワップのみが必要なため、右辺値で取得すると、所有権をより迅速に譲渡できます。

于 2012-05-05T03:42:07.293 に答える
0

const 右辺値参照のようなものがあるかどうかはわかりませんし、それが何を意味するかもわかりません。関数に到達して名前が付けられるまでには、それは本質的に const 左辺値参照と同じものになります (名前がある場合、それは左辺値であることがルールです)。移動することはできません。

呼び出しサイトでそれが何を意味するのかわかりません...もしあれば。確かに、それは人々を混乱させるだけであり、単に悪いことです.

率直に言って、それがコンパイルされた場合、私は少しイライラします。違法とは言い切れませんが。

さて、 const 部分を取り除くと、別の話になります。これで、shared_ptr を「移動」できます。私はむしろ、shared_ptr にムーブ コンストラクターがあることを疑っていますが、そうかもしれません。これは、移動が常に意味することを意味します: 受信エンティティは、提供された変数を引き継ぐことができ、おそらくそれを破壊する可能性があります。

于 2012-05-05T22:19:00.767 に答える