这是一段简单的代码。我需要帮助的是我在两个地方写的“ ???”。
目标是将临时指针传递到容器类,然后该容器类成为该对象的唯一所有者。但是,我不知道在写“ ???”的两个地方要写什么。
特别是,我在初始化列表中写什么,以及在我实际实例化容器类时写什么?
class abstractBase
{
virtual void method() = 0;
};
class derived : public abstractBase
{
// ...
};
class container
{
std::unique_ptr<abstractBase> ptr;
container(std::unique<abstractBase> input)
: ??? //What do I write here to make input = ptr?
{}
};
int main()
{
container instance(???) //what do I write here to pass a temporary ptr of type derived?
}
对于第一个,我想也许是
: ptr(std::move(input))
会这样吗?
对于第二个,我不确定。也许只是std::make_unique<derived> input
?
答案 0 :(得分:4)
是的,std::move和std::make_unique应该在这里起作用:
class container
{
std::unique_ptr<abstractBase> ptr;
public:
container(std::unique_ptr<abstractBase> input)
: ptr(std::move(input))
{}
};
int main()
{
container instance(std::make_unique<derived>());
}
您可能还想看看this article有关接收器参数和仅移动类型的信息。