我有一节课,PlayerInputComponent:
.H:
class PlayerInputComponent
{
public:
PlayerInputComponent(PlayerMoveComponent& parentMoveComponent_, std::unique_ptr<IRawInputConverter> inputConverter_);
PlayerInputComponent(PlayerInputComponent&& moveFrom);
void update();
private:
std::unique_ptr<IRawInputConverter> inputConverter;
PlayerMoveComponent& parentMoveComponent;
};
}
Run Code Online (Sandbox Code Playgroud)
的.cpp:
PlayerInputComponent::PlayerInputComponent(PlayerMoveComponent& parentMoveComponent_, std::unique_ptr<IRawInputConverter> inputConverter_) :
parentMoveComponent(parentMoveComponent_),
inputConverter(std::move(inputConverter_))
{
}
PlayerInputComponent::PlayerInputComponent(PlayerInputComponent&& moveFrom) :
parentMoveComponent(moveFrom.parentMoveComponent),
inputConverter(moveFrom.inputConverter.release())
{
}
Run Code Online (Sandbox Code Playgroud)
和一个PlayerMoveComponen包含PlayerInputComponent成员的类,并使用std::unique_ptr传递作为参数对其进行初始化.它的构造函数:
PlayerMoveComponent::PlayerMoveComponent(/* other parameters */ std::unique_ptr<IRawInputConverter> inputConverter) :
//other initializations
inputComponent(PlayerInputComponent(*this, std::move(inputConverter)))
{
}
Run Code Online (Sandbox Code Playgroud)
我为PlayerInputComponent类定义了自己的移动构造函数,因为我的理解是不会为包含引用成员的类构造默认移动构造函数.在这种情况下,虽然我知道引用将保留在PlayerInputComponent对象生命周期的持续时间内.
由于我初始化PlayerMoveComponent的inputComponent从一个临时变量,笔者认为以下两件事情之一是应该发生的:
PlayerInputComponent的移动构造函数用于初始化playerInputComponent成员变量.但是,Visual Studio 2012吐出了这个:
error C2248: …Run Code Online (Sandbox Code Playgroud)