SDL_Surfaceへのポインタを持つTextureというクラスがあります。私はそれをベクトルに追加したいとき、オリジナルが範囲外になったときに問題を防ぐために、デフォルト以外のコピーコンストラクタを用意する必要があります。コピーコンストラクタは、オブジェクトが値渡しで関数に渡されるたびに呼び出されることはわかっています。多くのテクスチャオブジェクトを値ごとにレンダリング関数に渡すと、すべてのフレームがスローダウンしますか?私はこの問題を避けるために参照渡すことができることを知っていますが、私は既存のコードを可能な限りそのままにしたいと思います。デフォルト以外のコピーコンストラクタはプログラムを遅くしますか?
0
A
答えて
2
まず、パフォーマンスを本当に懸念している場合、デフォルトまたはカスタムコピーコンストラクタを使用する場合でも、値渡しの参照は非常に高価になる可能性があります。
値渡しとコピーコンストラクタを使って渡すことが完全に設定されていれば、デフォルトのコピーコンストラクタはすべてが世話をするのでいいと思います。可能であれば、クラスを継続して使用できるようにクラスを調整してください。
クラスにポインタがある場合、1つのアプローチは、それらをある種のスマートポインタの中にラップすることです。たとえば、SDL_Surface*
の代わりにstd::shared_ptr<SDL_Surface>
(またはboost::shared_ptr<SDL_Surface>
が同じ)を使用すると、そのポインタをコピーすることができます。 shared_ptrクラスは参照カウントを保持し、すべての参照がなくなったときにのみサーフェスを削除します。この方法を行う場合は、this questionに示すように、SDL_Surfaceのカスタム削除関数を使用する必要があることに注意してください。
+0
ありがとうございました。私は参照渡しを開始し、スマートポインタを少し見てみましょう。 – Alidaco
関連する問題
- 1. デフォルト以外のglibcでプログラムをコンパイル
- 2. デフォルトのテンプレートパラメータをデフォルト以外のものの前に置くことはできますか?
- 3. なぜこのプログラムはprocessing.exeで遅く動作しますか?
- 4. デフォルトのコピーコンストラクタに「追加」することはできますか?
- 5. デフォルトのタイムゾーン以外のUILocalNotification
- 6. デフォルト以外の継承
- 7. c#、Microsoft.Office.Interop.Outlook、デフォルト以外のフォルダ
- 8. iPhoneがデフォルト以外のiOSブラウザからSafariで開く
- 9. デフォルトのhref以外に行くリンクを作成する
- 10. C++の暗黙的に定義されたコピーコンストラクタは、メンバーのコピーコンストラクタを正しく呼び出しますか?
- 11. デフォルト以外のページにフォームを送信
- 12. NHibernateでデフォルト以外のコンストラクタを使う
- 13. C++はコピーコンストラクタの代わりにデフォルトのコンストラクタを呼び出します
- 14. デフォルト以外のインスタンスを使用するとJsPlumbは接続しません
- 15. Pathogen(Vim)デフォルト以外のバンドルディレクトリの場所
- 16. COMオブジェクトのデフォルト以外のコンストラクタ
- 17. ガーベジコレクションはpythonを遅くしますか?
- 18. NSLogはアプリを遅くしますか?
- 19. デルファイでデフォルト以外のプリンタに印刷
- 20. コピーコンストラクタをprivateにしても、デフォルトの実装をそのまま使用することはできますか
- 21. Clojureプログラムをプログラマー以外の人にどのように配布しますか?
- 22. luceneはデフォルト以外のフィールドでクエリを無視する
- 23. Zend Framework:デフォルトのレイアウト以外を添付するには
- 24. ウィンドウからデフォルト以外のポートでGitoliteリポジトリを使用できますか?
- 25. C++コンパイラはどのようにデフォルトのコピーコンストラクタを合成するのですか
- 26. C#winformプログラムをログオンユーザー以外のユーザーとして実行する
- 27. Oracleはデフォルト以外の文字を見つける
- 28. pypi以外のパッケージに依存するプログラムのsetup.pyを書く方法
- 29. 派生クラスでコピーコンストラクタを宣言するには、ベースでデフォルトのコンストラクタを使用しないでください。
- 30. std :: containers呼び出しのコピーコンストラクタにコピーコンストラクタが含まれていますか?
あなたはそれを測定して教えてください。 –
明示的なコピーコンストラクタはどの程度激しいですか?パフォーマンスを管理するための最大の余地は、明示的なコピーコンストラクタを持つことです。デフォルトに関する魔法はありません。 – wallyk
確かに、自分のコードを書く前に知りたいと思っていただけです。また、コピーコンストラクタを作成するときに、すべての変数またはポインタのみを初期化する必要があります。ポインタを使って作業すれば、残りは自動的にコピーされますか? – Alidaco