我编写了以下代码,对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'&amp;的std ::移动?
谢谢。
答案 0 :(得分:8)
以下应该可以正常工作:
spriteBatch = std::unique_ptr<SpriteBatch>(new SpriteBatch(m_d3dContext.Get()));
或者,您可以避免使用某些make_unique
function重复类型名称。
spriteBatch = make_unique<SpriteBatch>(m_d3dContext.Get());
还有reset
member:
spriteBatch.reset(new SpriteBatch(m_d3dContext.Get()));
但是,既然你提到了一个构造函数,为什么不直接使用成员初始化列表?
CubeRenderer::CubeRenderer()
: spriteBatch(new SpriteBatch(m_d3dContext.Get())) {}