2012-04-20 9 views
1

と、ヒープ上のクリーンアップクラスへの適切な方法は、私はこのクラスを持っています。私は新しく知っている、あなたも同様にデータを削除する必要があります。上記の私のベクトルは、箇条書きへのポインタのベクトルではなく、単に箇条書きそのもの(ポインタであるべきか?)〜GameData()関数では、箇条書きのクリーンアップには何が必要ですか?私はそれが空であることを確認するべきですか?適切なメモリ管理のために適切に「削除」する具体的な方法は何ですか?私のデザインが間違っているなら、私がこれを取り扱うべき正しい方法を教えてください。C++ベクトル

おかげ

+0

@Alsを。 'vector'は、標準ライブラリのすべてのコンテナと同様、バリュー・セマンティクスを持っています。ベクトル内のオブジェクトは、それらがベクトルのメンバーであるかのように動作し、オブジェクトがベクトル内に存在しなくなると、正しく破棄されます。 –

+0

@JamesKanze:真。しかし、標準ライブラリコンテナでは、ポインタメンバー(生またはスマート)の所有権は取られません。ダイナミックメモリの割り当てを解除する責任は、ユーザまたはビルドされたRAIIセマンティクス(スマートポインタの場合)に依存します。コンテナにはポインタ要素の所有者に関する知識がないため、コンテナの観点からは意味があります。そのことについて割り当てがフリーストア上にあるかどうかも分かりません。 –

+0

@Alsそれは、「所有権」は人工的な概念であり、まれには何にも関連しないからです。コンテナ内のオブジェクトはコンテナによって「所有されていません」、論理的にコンテナの一部です。他のクラスに関してコンテナに関する唯一の特殊性は、その一部であるオブジェクトの数が動的に変更できることです。オブジェクトにポインタ型がある場合はもちろん、ポインターはコンテナの一部であり、ポインターは指し示すものではありません。 –

答えて

5

〜GameData()関数では、箇条書きのクリーンアップには何が必要ですか?

いいえ。自動的に呼び出されるベクトルのデストラクタによって行われます。

-

私はGameDataポインタを作成し、新しいとそれのためにメモリを割り当てます。私は新しいと、あなたにも

あなたが行う必要はありませんデータを削除する必要があります知っているあなたは、スマートポインタのいくつかのフォームなどstd::unique_ptrstd::shared_ptrを使用している場合。スマートポインタを使用すると、スマートポインタ自体の責任であるため、削除する必要はありません。

はここからセクションスマートポインタを読む:もちろん

+0

アドバイスをいただきありがとうございました。ブーストにはこのようなことがあり、私はそれを調べました。明白な初心者のC++プログラマーとして、私は自分の人生を楽にしてくれるものを学ぶ前にベアメタルのことを学びたいと思っていました:) Thanks tho – will

+0

@will:私はそれが別の方法でなければならないと思います。プログラマーの生活を楽にしてくれることでしょう。その後、 'new'と' delete'を使った手動メモリ管理など、詳細を学ぶべきです。 – Nawaz

+0

touche :) 1つの質問は、どこにもBulletのコピーを作成するベクターですか?代わりにポインタでなければならないのでしょうか?それが弾丸ポインタのベクトルなら、私は自分自身で削除を処理する必要がありますか? – will

3

あなたはnewでそれを作成しているためだけで、あなたがあなたのGamaDataインスタンスを削除することを確認し、GamaDataメンバーを心配する必要はありません。