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_unique功能重复类型名称。

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 回答