1

デフォルトのコンストラクターを使用してオブジェクトを初期化し、コンストラクターをパラメーターで使用してDirectXインターフェイスをコピーするという深刻な問題があります。

SpriteBatch spriteBatch; //Creating an Object to SpriteBatch Class

//This Function Gets Called when Device is Created with Parameter to Device
void LoadContent(GraphicDevice graphicDevice) 
{
  /*Here is the Problem, When it Assigns to the Object it creates a Temp Object and
  Destructor gets called where I free everything, I can't use the GraphicDevice after
  this.*/

  spriteBatch = SpriteBatch(graphicDevice); 
}


//SpriteBatch Class

class SpriteBatch
{
  GraphicDevice graphicDevice;

  public:
    SpriteBatch();
    SpriteBatch(GraphicDevice graphicDevice);
    ~SpriteBatch();
}

SpriteBatch::SpriteBatch()
{
}

SpriteBatch::SpriteBatch(GraphicDevice graphicDevice)
{
  this->graphicDevice = graphicDevice;
}

SpriteBatch::~SpriteBatch()
{
   graphicDevice-Release();
}

2つのオブジェクトをコピーするときではなく、プログラムが終了したときにデストラクタが呼び出されるようにします。代入演算子とコピーコンストラクターをオーバーロードしてみましたが、役に立ちませんでした。とにかくそれをすることはありますか?

4

2 に答える 2

1

shared_ptrに aを使用しgraphicDeviceて、参照カウントがゼロに達したときにのみ解放されるようにします。そもそもデストラクタでこれを処理するべきではありません。

于 2013-02-24T04:46:40.863 に答える
0

コピー、一時的なもの、およびそれらの破壊の数を減らすために、参照を通過します。

void LoadContent(GraphicDevice& graphicDevice) 
{
    spriteBatch = SpriteBatch(graphicDevice); 
}

その後:

SpriteBatch::SpriteBatch(GraphicDevice& graphicDevice)
    :graphicDevice(graphicDevice)
{
}

GraphicDeviceのインスタンスごとに新しいものを作成することを避けたい場合はSpriteBatch、以下をGraphicDevice graphicDevice;参照してください。

GraphicDevice& graphicDevice;

SpriteBatchこれは、すべてのコンストラクターで初期化する必要があります。

于 2013-02-24T04:31:22.053 に答える