関数から逆参照されたshared_ptrの値を返します

レッカー

これが新人の質問です。次のコードは安全ですか?

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 /移動または破壊安全でない場合、私の代替手段は何ですか?

エエロリカ

これは起こります:

  • 指摘されたオブジェクトの一時的なコピーが作成されます。これは関数の戻り値です。コピーを削除することはできません。
  • 共有ポインタを含む関数のローカル変数は破棄されます。
  • 共有ポインタが破棄されると、refcountがデクリメントされます。関数内で共有ポインターのコピーが作成されなかった場合、refocountは0に達し、指定されたオブジェクトは破棄されます。

安全ですが、動的割り当てと共有ポインタの使用は無意味に思え、セットが大きい場合、コピーの非効率性がパフォーマンスを低下させる可能性があります。


ポインタを使用する必要性を示していないので、もっと簡単な方法を提案します。

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]

編集
0

コメントを追加

0

関連記事

分類Dev

逆参照されたポインターを関数の未定義の動作からの参照として返していますか?

分類Dev

関数から返された右辺値参照に値を割り当てます

分類Dev

参照は関数の右辺値から返されますか?

分類Dev

GDBのリストから逆参照された値を出力します

分類Dev

Javascriptのネストされた関数から値を返します

分類Dev

shared_ptrを関数で返すときに、暗黙的にブール値に変換されないのはなぜですか?

分類Dev

クラスC ++からshared_ptrを返します

分類Dev

SWIG:SwigPyobjectからラップされたstd :: shared_ptrの値を取得する方法

分類Dev

右辺値shared_ptrの逆参照

分類Dev

std :: shared_ptr逆参照がnullポインター例外(または同様のもの)をスローしないのはなぜですか?

分類Dev

参照からshared_ptrを作成する

分類Dev

std :: shared_ptr <T>を受け取る関数にstd :: shared_ptr <T>を渡しますか?

分類Dev

ARCを使用したC関数での自己参照の逆参照、参照はintptr_tとして渡されます

分類Dev

shared_ptrを返す関数でstd :: map :: emplaceを使用するのは正しいですか?

分類Dev

Pythonの装飾された関数から値を返す

分類Dev

std :: shared_ptr <void>からstd :: shared_ptr <T>を初期化します

分類Dev

値または右辺値参照修飾メンバー関数からの右辺値参照によって返されますか?

分類Dev

enable_shared_from_thisから派生したオブジェクトがshared_ptrによって管理されているかどうかを確認しますか?

分類Dev

それ自体へのshared_ptr参照を削除しても大丈夫ですか

分類Dev

C ++ const参照の値で返される関数の結果を取得します

分類Dev

クラス全体でstd :: swapを使用する場合、特殊なshared_ptr :: swap()関数は使用されますか?

分類Dev

unique_ptrとshared_ptrが、それらが構築されたポインターを無効にしないのはなぜですか?

分類Dev

shared_ptrから生のptrを取得し、再度共有する

分類Dev

関数から返された動的配列の割り当てを解除します

分類Dev

PHPの関数から連結された文字列を返します

分類Dev

作成されたshared_ptrへのboost :: make_shared参照

分類Dev

std::shared_ptr を移動するための関数宣言

分類Dev

null shared_ptrを返すのは正しいですか?

分類Dev

逆参照されたポインタから元のポインタを返す

Related 関連記事

  1. 1

    逆参照されたポインターを関数の未定義の動作からの参照として返していますか?

  2. 2

    関数から返された右辺値参照に値を割り当てます

  3. 3

    参照は関数の右辺値から返されますか?

  4. 4

    GDBのリストから逆参照された値を出力します

  5. 5

    Javascriptのネストされた関数から値を返します

  6. 6

    shared_ptrを関数で返すときに、暗黙的にブール値に変換されないのはなぜですか?

  7. 7

    クラスC ++からshared_ptrを返します

  8. 8

    SWIG:SwigPyobjectからラップされたstd :: shared_ptrの値を取得する方法

  9. 9

    右辺値shared_ptrの逆参照

  10. 10

    std :: shared_ptr逆参照がnullポインター例外(または同様のもの)をスローしないのはなぜですか?

  11. 11

    参照からshared_ptrを作成する

  12. 12

    std :: shared_ptr <T>を受け取る関数にstd :: shared_ptr <T>を渡しますか?

  13. 13

    ARCを使用したC関数での自己参照の逆参照、参照はintptr_tとして渡されます

  14. 14

    shared_ptrを返す関数でstd :: map :: emplaceを使用するのは正しいですか?

  15. 15

    Pythonの装飾された関数から値を返す

  16. 16

    std :: shared_ptr <void>からstd :: shared_ptr <T>を初期化します

  17. 17

    値または右辺値参照修飾メンバー関数からの右辺値参照によって返されますか?

  18. 18

    enable_shared_from_thisから派生したオブジェクトがshared_ptrによって管理されているかどうかを確認しますか?

  19. 19

    それ自体へのshared_ptr参照を削除しても大丈夫ですか

  20. 20

    C ++ const参照の値で返される関数の結果を取得します

  21. 21

    クラス全体でstd :: swapを使用する場合、特殊なshared_ptr :: swap()関数は使用されますか?

  22. 22

    unique_ptrとshared_ptrが、それらが構築されたポインターを無効にしないのはなぜですか?

  23. 23

    shared_ptrから生のptrを取得し、再度共有する

  24. 24

    関数から返された動的配列の割り当てを解除します

  25. 25

    PHPの関数から連結された文字列を返します

  26. 26

    作成されたshared_ptrへのboost :: make_shared参照

  27. 27

    std::shared_ptr を移動するための関数宣言

  28. 28

    null shared_ptrを返すのは正しいですか?

  29. 29

    逆参照されたポインタから元のポインタを返す

ホットタグ

アーカイブ