8

私は次のようにコーディングしましたが、C++ は初めてで、ぎこちなく感じます。「spriteBatch」(unique_Ptr) クラス スコープを指定しようとしています。ヘッダーファイルは次のとおりです。

    ref class CubeRenderer : public Direct3DBase
{
public:
    CubeRenderer();
    ~CubeRenderer();


private:

    std::unique_ptr<SpriteBatch> spriteBatch;

};

次に、cpp ファイルのコンストラクターで、次のようにします。

std::unique_ptr<SpriteBatch> sb(new SpriteBatch(m_d3dContext.Get()));
spriteBatch = std::move(sb);

「sb」を作成して「spriteBatch」に移動しなければならなかった方法は、不器用に思えます。「spriteBatch」に直接代入しようとして失敗しました (適切な構文がわからないだけかもしれません)。「sb」と std::move を使用する必要を回避する方法はありますか?

ありがとうございました。

4

1 に答える 1

11

以下はうまくいくはずです:

spriteBatch = std::unique_ptr<SpriteBatch>(new SpriteBatch(m_d3dContext.Get()));

または、型名をいくつかのmake_uniquefunctionで繰り返さないようにすることもできます。

spriteBatch = make_unique<SpriteBatch>(m_d3dContext.Get());

resetメンバーもあります:

spriteBatch.reset(new SpriteBatch(m_d3dContext.Get()));

しかし、コンストラクターについて言及したので、メンバーの初期化リストを使用しないのはなぜですか?

CubeRenderer::CubeRenderer()
: spriteBatch(new SpriteBatch(m_d3dContext.Get())) {}
于 2012-04-29T16:42:44.287 に答える