C++ 如何在C++;?
拥有一个带有默认构造函数和移动构造函数的类C++ 如何在C++;?,c++,reference,move,lvalue,rvalue,C++,Reference,Move,Lvalue,Rvalue,拥有一个带有默认构造函数和移动构造函数的类小部件,我想编写一个函数: 接受类型为Widget的左值和右值作为参数 从该参数内部“移动”,例如,移动到某个其他小部件实例 例如: Widget w; auto p1 = pointer_from_lrvalue(Widget()); // rvalue argument auto p2 = pointer_from_lrvalue(w); // lvalue argument // w is guaranteed to be no longer us
小部件
,我想编写一个函数:
Widget
的左值和右值作为参数小部件
实例Widget w;
auto p1 = pointer_from_lrvalue(Widget()); // rvalue argument
auto p2 = pointer_from_lrvalue(w); // lvalue argument
// w is guaranteed to be no longer used from now on
其中指针\u from\u lrvalue()
可能如下所示:
std::unique_ptr<Widget> pointer_from_lrvalue(Widget w) {
return std::unique_ptr<Widget>(new Widget(std::move(w)));
}
第二种方法使用通用参考:
template <typename T>
std::unique_ptr<std::remove_reference_t<T>> pointer_from_lrvalue(T&& t) {
return std::unique_ptr<std::remove_reference_t<T>>
(new std::remove_reference_t<T>(std::move(t)));
}
class WidgetMover
{
Widget& widget;
public:
Widget&& moveWidget() { return std::move(widget); }
WidgetMover(Widget &w) : widget(w) {}
WidgetMover(Widget &&w) : widget(w) {}
};
std::unique_ptr<Widget> pointer_from_lrvalue(WidgetMover w) {
return std::unique_ptr<Widget>(new Widget(w.moveWidget()));
}
模板
std::唯一的\u ptr指针\u自\u lrvalue(T&&T){
返回std::unique\u ptr
(新标准:删除参考(标准:移动(t));
}
我想知道:
小部件复制构造函数
小部件”
参考:
类WidgetMover
{
Widget&Widget;
公众:
Widget&&moveWidget(){return std::move(Widget);}
WidgetMover(Widget&w):Widget(w){}
WidgetMover(小部件&&w):小部件(w){}
};
std::唯一的\u ptr指针\u来自\u lrvalue(WidgetMover w){
返回std::unique_ptr(新小部件(w.moveWidget());
}
必须注意确保没有WidgetMover
在可能已初始化的右值的生存期之后继续存在class WidgetMover
{
Widget& widget;
public:
Widget&& moveWidget() { return std::move(widget); }
WidgetMover(Widget &w) : widget(w) {}
WidgetMover(Widget &&w) : widget(w) {}
};
std::unique_ptr<Widget> pointer_from_lrvalue(WidgetMover w) {
return std::unique_ptr<Widget>(new Widget(w.moveWidget()));
}