[解決済み] std::make_unique と std::unique_ptr の new による違い
2022-04-25 04:01:23
質問
はたして
std::make_unique
のような効率的な利点があります。
std::make_shared
?
を手動で構築するのに比べ
std::unique_ptr
:
std::make_unique<int>(1); // vs
std::unique_ptr<int>(new int(1));
解決方法は?
の動機は?
make_unique
は、主に2つあります。
-
make_unique
はテンポラリの作成に安全ですが、明示的にnew
を使用する場合は、名前のないテンポラリーを使用しないという規則を覚えておく必要があります。foo(make_unique<T>(), make_unique<U>()); // exception safe foo(unique_ptr<T>(new T()), unique_ptr<U>(new U())); // unsafe*
-
を追加しました。
make_unique
を「絶対に」使用しないよう指示できるようになりました。new
を使用することはできません。new
を作るとき以外はunique_ptr
"です。
3つ目の理由もあります。
-
make_unique
は、冗長な型の使用を必要としません。unique_ptr<T>(new T())
->make_unique<T>()
を使用した場合のような実行効率の向上は、いずれの理由にも含まれていません。
make_shared
(2回目の割り当てを回避できるため、ピーク時のメモリ使用量が増える可能性があります)。
* C++17では、これがもはや安全でないことを意味するルール変更が含まれることが期待されています。C++ 委員会資料を参照 P0400R0 と P0145R3 .
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] std::move()とは何ですか?また、どのような場合に使用するのですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
-
[解決済み】std::auto_ptrからstd::unique_ptrへ
-
[解決済み】配列でunique_ptrを使用することはありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】Visual C++で "Debug Assertion failed "の原因となる行を見つける。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み] new演算子よりstd::make_uniqueを使うメリット【重複あり