のためのスマートポインタの使用「項目16:new
とdelete
の用途に対応するのと同じ形式を使用します」スコット・マイヤーズ効果的なC++のを、あなたはauto_ptr
(またはtr1::shared_ptr
)に動的に割り当てられた配列を置くべきではありませんdelete[] p
の代わりにdelete p
が破壊時に呼び出されます(answersも参照)。しかし、これはまだC++ 11 <以上、特にstd::shared_ptr
とstd::unique_ptr
のために保持されますか?私はいくつかのオープンソースコードにstd::unique_ptr<uint8_t[]>
の使用を気付いたので、後者が正しい場合、どのようにしてnew
とnew []
を割り振ることができますか?に基づいて、C++での動的に割り当てられた配列
答えて
std::unique_ptr
は、std::shared_ptr
ではなく、C++ 11の配列タイプに特化しています。したがって、std::unique_ptr<uint8_t[]>
はdelete []
と呼ばれますが、std::shared_ptr<uint8_t[]>
はデフォルトでdelete
を呼び出します。
この動作はC++ 17では変更されています。 C++では、std::shared_ptr
は配列型に特化されており、std::shared_ptr<uint8_t[]>
を使用するとdelete []
が呼び出されます。
後者は正しく、unique_ptr
は配列でうまく動作します。それはdelete[]
を呼び出す配列タイプのためのテンプレート特化を持っています。それにもかかわらず、Scott MeyersのEffective Modern C++では、スマートポインタの代わりにstd::array
またはstd::vector
を使用することが推奨されています。
彼はまた、 'boost :: scoped_array'と' boost :: shared_array';を使用することを提案します。配列型のテンプレート特殊化へのリンクを提供していますか? – Matthias
@MatthiasはRichard Crittenのコメントを見て、彼はcppreferenceへのリンクを提供しています。テンプレートのインスタンス化はlibstdC++コード内にあります。 –
- 1. C++バブルソート動的に割り当てられた配列
- 2. CUDAで動的に割り当てられた配列コピー
- 3. 格納データ動的に割り当てられた配列
- 4. ポインタと動的に割り当てられた配列は
- 5. Cで動的に割り当てられた配列メンバーを削除する
- 6. Python C Api:動的に割り当てられた配列をPythonに転送
- 7. C++で動的に割り当てられた配列メンバーからなる動的に割り当てられた構造体を削除する方法は?
- 8. 動的に割り当てられた配列を削除するC++
- 9. Moodle:クイズ結果に基づいた動的役割の割り当て
- 10. C++で動的に割り当てられたベクタのセグメンテーションエラー
- 11. 何らかの理由で動的に割り当てられた配列
- 12. 動的に割り当てられた3D配列を割り当てるときにプログラムブームが発生する
- 13. 配列の動的割り当て
- 14. 動的に割り当てられたCの構造体
- 15. C++ - 動的に割り当てられた変数のスコープ
- 16. プリミティブ型のデストラクタは、動的に割り当てられた配列ですか?
- 17. 静的に割り当てられたchar配列のC - memset segfault
- 18. 構造体内に動的に割り当てられた配列
- 19. 静的に割り当てられた配列へのアクセスVSへの静的に割り当てられた配列へのポインタによるアクセス
- 20. 構造体にポインタを動的に割り当てた配列
- 21. 動的に割り当てられたポインタ配列のメモリを拡張する
- 22. 動的に割り当てられた配列のサイズを調べる
- 23. 動的に割り当てられたギザギザの配列を削除する
- 24. 動的に割り当てられた行列の値の入力 - C
- 25. 動的に割り当てられたmpfr_t行列とstd :: vector
- 26. スプリット配列が動的に別の配列に基づいて
- 27. Cの構造体の動的配列の割り当て
- 28. Cの構造体の動的配列の割り当て
- 29. C - 動的2D配列の文字と割り当てのスキャン
- 30. 動的に割り当てられた構造体を再割り当て
( 'bool'以外の、多分、依存する)配列に対して' std :: vector'を使用してください。これは、C++の標準動的サイズ配列です。 –
http://en.cppreference.com/w/cpp/memory/unique_ptrを参照して、ポイント(2)を参照してください。ノート –