C++では、new
/delete
ではなく、常にunique_ptr
またはshared_ptr
を使用する必要がありますか?どのようにパフォーマンスとは、スマートポインタははるかに遅いですか?C++ 11のスマートポインタは常に新しい/削除の代わりに?
5
A
答えて
7
unique_ptr
生ポインタを使用する場合と比べて実行時のオーバーヘッドがありません(想定されていません)。 shared_ptr
にはメモリと時間のオーバーヘッドがあります(実装によってはいくらかが異なります)。実際にはshared_ptr
のような振る舞いが必要な場合は、の実用的なのオーバーヘッドは簡単にゼロになります(つまり、他の実装ではより高速またはより効率的なメモリと考えることはできません)。
あなたのコードで新しい/削除を使用することは決してないとは言えませんが、それはあなたがいつもやることではありません。
2
私はそれはRAIIとCounted bodyイディオムを次の)
1 because-生のメモリを処理するためのshared_ptrを好むだろう。
2)オブジェクトは破棄されることが保証され、例外が発生してもメモリは解放されます。
3)新しい/削除するタイミングを決めることができなくなります。
関連する問題
- 1. ポインタの代わりにスマートポインタ
- 2. 削除の代わりにdjangoの更新(ソフト削除)のステータス
- 3. typeid(T).name()の代わりにC++ 11?
- 4. SQL削除ステートメントはエラーの代わりに削除します
- 5. 削除トリガーの代わりにOracle SQL
- 6. wcalculator削除ボタン代わりにenteredInput.length() - 1);
- 7. コンポーネントを更新する代わりに削除する
- 8. PDO UPDATEクエリは更新する代わりに値を削除します
- 9. TYPO3の削除]ボタンが代わりにその写真の削除ボタンと1
- 10. 削除トリガーの代わりにSQL Serverの行を削除する方法
- 11. enumの代わりにC#
- 12. C++のリンクリストが正常に動作しない(スマートポインタ)
- 13. 代わりに新しい意思
- 14. 削除またはスマートポインタのエラー
- 15. IE 11は白いXを代わりにレンダリングする
- 16. 通常のナビゲーション代わりに$ location.path
- 17. 新しいパラメータの代わりに既存のメソッドを使用
- 18. jdbc.support.nativejdbcの代わりにSpring 5を削除する
- 19. 削除の代わりに述語を設定する
- 20. C#Calucate表面ブール代数の代わりに通常の逆数
- 21. std :: Cの代わりにC
- 22. Jpa:更新する代わりに扶養家族を削除する
- 23. カスケードを削除する代わりにデフォルトに設定
- 24. Python - inplaceの代わりに.bakバックアップファイルをclose()で削除しますか?
- 25. 新しいスレッドの代わりにサーバーソケットクライアント用のExecutorを使用
- 26. ReSharperの代わりに、常に1が良いの文字列
- 27. 代わりにSQLite - C#サーバー
- 28. BOOST_FOREACHを "純粋な" C++ 11の代わりに置き換えますか?
- 29. osascriptは新しいタブの代わりに新しいウィンドウを開きます
- 30. 新しいタブの代わりに新しいウィンドウを開く方法
'unique_ptr'はゼロコストの抽象化として設計されました。心配するのをやめ、爆弾を愛することを学ぶ。 –
** 'new'と' delete'の代わりに**スマートポインタ**を使う方法はありますか? – iammilind
@iammilind 'make_shared'を削除するのを避けるために、**' new'でそれらを使用しなければなりません。また 'make_unique'の実装も使用します。もちろん、内部ではまだ 'new'を使います。 – Cubic