[解決済み] C++11のunique_ptrとshared_ptrは相互に型変換できるのですか?
質問
C++11 標準ライブラリは、.html ファイルから.html ファイルに変換するユーティリティを提供しますか。
std::shared_ptr
から
std::unique_ptr
またはその逆は?これは安全な操作ですか?
どのように解決するのですか?
<ブロッククオート
std::unique_ptr
は排他的所有権を表現する C++11 の方法ですが、その最も魅力的な特徴の 1 つは
への変換が簡単で効率的であることが最大の魅力です。
std::shared_ptr
.
これは、なぜ
std::unique_ptr
がファクトリ関数の戻り値型として非常に適している理由の重要な部分です。ファクトリ関数は、呼び出し側が返すオブジェクトに対して排他的所有権のセマンティクスを使用したいのか、それとも共有所有権(つまり。
std::shared_ptr
のような)共有所有権の方がより適切であるかどうかを知ることができません。を返すことで
std::unique_ptr
を返すことによって、ファクトリーは呼び出し側に最も効率的なスマートポインタを提供しますが、呼び出し側がそれをより柔軟な兄弟に置き換えることを妨げることはありません。
std::shared_ptr
から
std::unique_ptr
は許可されません。リソースの生涯管理を一旦
std::shared_ptr
に引き渡したら、もうその考えは変えられません。たとえ参照カウントが1であっても、リソースの所有権を取り戻すことはできず、たとえば
std::unique_ptr
がそれを管理します。
参考文献 エフェクティブ・モダン・C++」。c++11とc++14の使い方を改善するための42の具体的な方法。Scott Meyers。
要するに、簡単かつ効率的に
std::unique_ptr
を
std::shared_ptr
に変換することはできませんが
std::shared_ptr
を
std::unique_ptr
.
例えば
std::unique_ptr<std::string> unique = std::make_unique<std::string>("test");
std::shared_ptr<std::string> shared = std::move(unique);
または
std::shared_ptr<std::string> shared = std::make_unique<std::string>("test");
関連
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] reinterpret_castはいつ使うのか?
-
[解決済み] g++でC++11をコンパイルする
-
[解決済み] C++のmake_sharedと通常のshared_ptrの違いについて
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較