メンバ変数を実体で持つか、ポインタで持つか、で悩んでおります。
ゲームに登場するオブジェクトの基底クラスを作成しているのですが、
例えば、下記のような場合、Vector3、BoundingCircleは実体で持つべきでしょうか。ポインタで持つべきでしょうか。
実体で持つ利点はオブジェクト生成時に一緒に作成される為nullチェックが必要ないこと、クラス破棄時に一緒に捨てられることだと思っております。
デメリットとしてはヘッダのインクルードが増えてしまうこと、循環参照が起きる可能性があることだと思っております。
ポインタで持つ場合の利点は、生成を遅らせることができる、ヘッダインクルードを減らせる、オブジェクトの差し替えがポインタの入れ替えで済む、だと思っております。
デメリットとしてはnullチェックが必要であることだと思っております。
どちらでも実装することは可能な為、どのように選択すればよいのか迷っております。
ゲームのプラットフォームはPCです。
可能であれば、なぜそう選択するのか理由も合わせて答えて頂けると助かります。
よろしくお願い致します。
class BaseEntity {
public:
//------------------------------------------------
// デフォルトコンストラクタ
//------------------------------------------------
BaseEntity( int type, const Vector3& pos )
: mID( id++ )
, mType( type )
, mPosition( pos )
, mBoundingCircle( bc ) {}
//------------------------------------------------ // 更新 //------------------------------------------------ virtual void update(){}; //------------------------------------------------ // 描画 //------------------------------------------------ virtual void draw(){}; // getter //------------------------------------------------ // IDを返す //------------------------------------------------ constexpr int getID() const noexcept { return mID; } //------------------------------------------------ // Typeを返す //------------------------------------------------ constexpr int getType() const noexcept { return mType; } //------------------------------------------------ // 位置を返す //------------------------------------------------ constexpr Vector3 getPosition() const noexcept { return mPosition; } //------------------------------------------------ // コライダを返す //------------------------------------------------ BoundingCircle getCollider() const noexcept { return mBoundingCircle; } // setter //------------------------------------------------ // Typeを設定する //------------------------------------------------ constexpr void setType( int type ) noexcept { mType = type; } //------------------------------------------------ // Positionを設定する //------------------------------------------------ constexpr void setPositon( const Vector3& pos ) noexcept { mPosition = pos; } //------------------------------------------------ // コライダを設定する //------------------------------------------------ constexpr void setCollider( const BoundingCircle& bc ) noexcept { mBoundingCircle = bc; }
private:
static int id; // オブジェクト生成時に増加させる為、静的
int mID; // 一意に識別する為のID
int mType; // オブジェクトのタイプ
Vector3 mPosition; // 位置
BoundingCircle mBoundingCircle; // 当たり判定
}

回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。