これが新人の質問です。次のコードは安全ですか?
boost::unordered_set<std::string> func()
{
boost::shared_ptr<boost::unordered_set<std::string>> list =
boost::make_shared<boost::unordered_set<std::string>>();
/* Code to populate the shared_ptr to unordered_set goes here and I do
populate my set. */
return *list;
}
最初に何が起こりますか?shared_ptr
メモリ障害を引き起こすことによるそこのコピー/ NRVO /移動または破壊?安全でない場合、私の代替手段は何ですか?
これは起こります:
安全ですが、動的割り当てと共有ポインタの使用は無意味に思え、セットが大きい場合、コピーの非効率性がパフォーマンスを低下させる可能性があります。
ポインタを使用する必要性を示していないので、もっと簡単な方法を提案します。
boost::unordered_set<std::string> list;
/* Code to populate the unordered_set goes here and I do
populate my set. */
return list;
NRVOはこれに適用でき、適用されない場合、戻り値は移動によって作成されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加