2011-11-14 7 views
0

私は今C++を学習しています。メンバ変数オブジェクトの格納に関する助言を得たいと思っていました。 BのインスタンスをAに保存したいのですが、これを実行する最善の方法は何ですか?オブジェクトをC++のクラスにポインタとして格納

[編集] - 私はこの例をより現実的なものにしました。私は実行時にテクスチャを構築して割り当て、それをゲームオブジェクトに割り当てることができる必要があります。

class GameObject 
{ 
public: 
    Texture texture; 
}; 

.... 

GameObject gameObject; 
Texture texture; 

gameObject.texture = texture; 

または

class GameObject 
{ 
public: 
    Texture *texture; 
}; 

.... 

GameObject gameObject; 

gameObject.texture = new Texture; 

私はポインタを使用しないようにしようとしているが、いくつかの事例では、私は私がする必要があると感じ。

+3

最初の例では、なぜ義務ですか?あなたはすでにAにBのインスタンスを持っています。 – neagoegab

+1

答えは所有権と関連するセマンティクスによって異なります。メンバー変数オブジェクトの格納は、最初のケースで行います。2番目のケースでは、別の場所にあるオブジェクトへのポインタを保持します。 –

答えて

3

メンバ変数を別のオブジェクトに再配置(別のclass Bオブジェクトを参照)したい場合は、ポインタを使用します。単にオブジェクトを使用していない場合。

はい、ポインタを避けることをお勧めします。使用する必要がある場合は、生/裸ポインタの代わりにスマートポインタを使用する必要があります。

+0

私は達成しようとしているものをより正確に反映するようにコードを更新しました。私は、実行時にテクスチャを作成し、それをゲームオブジェクトに割り当てることができるようにしたいと考えています。 – Meroon

+0

@Meroon:コンストラクタにテクスチャを渡すことはできませんか? –

+0

新しいゲームオブジェクトを作成しなくても、テクスチャを入れ替えることができます。 – Meroon

0

本当にあなたの特定のソリューションとニーズによって異なります。どちらの方法も上質で受け入れやすいものです。あなたのソリューションは、どのようにしてやるべきかを指示するので、どの言語でもほとんどのことを行う「正しい方法」はありません。

ただし、Bが多くのデータメンバーを持つ大きなクラスである場合は、ポインタを使用しないとAのサイズが増えることに注意してください。また、ポインタを使用する場合は、適切な割り当てと割り当て解除が実行されていることを確認し、それを行うことでユーザーを信頼しないようにする必要があります。ここで

0

は、私が何を考えている使用するには良い条件です。

  1. 機能:BのAの一部またはそれにだけ関連していますか?車にはエンジンが搭載されていますが、ドライバーは外部にあります。これを見るもう1つの方法は、最初から一緒にいるのか、BがAに割り当てられているかですか?

  2. 構成:Aが構築された時点で、Bは完全に定義されていますか?

0

あなたはABのメモリを制御したい場合は依存。

ポインタを使用すると、他のオブジェクト間でオブジェクトを前後に渡すときに非常に便利です。ポインタを使用しないことを決定するとき、オブジェクトが範囲外になるとすぐにそのメンバ変数も変わることを認識することが重要です。そのオブジェクトのメンバへのポインタが他の場所にまだ存在する場合、問題につながる可能性があります。

これはアプリケーションでは問題にならない場合は、ポインタの使用を避けます。

関連する問題