假设我有一个实例化的Base b.Foo是一个儿童班Base.
我想要做的是拥有一个构造函数 Foo
class Foo : public Base
{
Foo(Base b, T otherArg) : Base(b)
{
/*ToDo - do something with otherArg*/
}
}
Run Code Online (Sandbox Code Playgroud)
将 'b'实例移动到Foo正在构造的实例.如果构造Foo失败(例如在我的/*ToDo step*/),则b不应移动.
我可以在C++ 11中这样做吗?(我付不起深刻的副本).构造函数原型需要Foo(Base&& b, T otherArg)吗?
是的你可以 :
Base以便接受右值std::move例子:
#include <iostream>
#include <utility>
class Base
{
public:
Base() {}
Base(Base&& b) { std::cout << "Move ctr"; }
};
class Foo : public Base
{
public:
Foo(Base&& b, double otherArg) : Base(std::move(b))
{
// ...
}
};
int main()
{
Foo(Base(), 2.0);
}
Run Code Online (Sandbox Code Playgroud)
或者
int main()
{
Base b;
Foo(std::move(b), 2.0);
}
Run Code Online (Sandbox Code Playgroud)
笔记:
bin的状态Base(Base&& b)(当然,在对它进行任何操作之前),并在构造函数rollback_move中发生异常时通过成员函数恢复它Foo。