64得票3回答
派生类对象的移动构造函数

当你有一个带有移动构造函数的派生对象,而基类对象也具有移动语义时,从派生对象移动构造函数中调用基类对象移动构造函数的正确方法是什么? 我首先尝试了最显而易见的方法: Derived(Derived&& rval) : Base(rval) { } 然而,这似乎最终会调用基类...

62得票3回答
在从函数返回值时使用std::move(),以避免复制。

考虑一个支持默认移动语义的类型T。还考虑下面的函数: T f() { T t; return t; } T o = f(); 在旧的C++03中,一些非最优化的编译器可能会调用两次拷贝构造函数,一次是为了"返回对象",一次是为了o。 在C++11中,由于f()内的t是一个...

59得票2回答
在C++11中如何将对象所有权从一个unique_ptr转移到另一个unique_ptr?

在 C++11 中我们可以使用 std::move() 将对象的所有权转移到另一个 unique_ptr 中。所有权转移后,放弃所有权的智能指针将变为 null ,get() 返回 nullptr。std::unique_ptr<int> p1(new int(42)); std:...

58得票1回答
搬移还是命名返回值优化(NRVO)?

假设我们有以下代码:std::vector<int> f() { std::vector<int> y; ... return y; } std::vector<int> x = ... x = f(); 编译器似乎有两种方法: (a) N...

58得票4回答
移动后的向量是否总是为空?

我知道通常标准对从中移动的值没有太多要求: N3485 17.6.5.15 [lib.types.movedfrom]/1: 在C++标准库中定义的类型的对象可以被移动 (12.8)。移动操作可以被明确地指定或隐含地生成。除非另有规定,否则这些移动后的对象应该放在一个有效但未指定状态...

57得票2回答
标准库对于自我移动赋值有什么保证?

C++11标准在与标准库相关的自身移动赋值方面有什么规定?更具体地说,如果有的话,对于selfAssign做了什么是有保证的吗? template<class T> std::vector<T> selfAssign(std::vector<T> v) {...

57得票2回答
为什么派生类具有移动构造函数而基类没有?

考虑以下示例:#include <iostream> #include <string> #include <utility> template <typename Base> struct Foo : public Base { us...

52得票4回答
移动语义和函数顺序评估

假设我有以下内容:#include <memory> struct A { int x; }; class B { B(int x, std::unique_ptr<A> a); }; class C : public B { C(std::unique_p...

51得票2回答
可以将本地堆栈变量 std::move 吗?

请考虑以下代码: struct MyStruct { int iInteger; string strString; }; void MyFunc(vector<MyStruct>& vecStructs) { MyStruct NewStruc...

51得票1回答
引用过载与仅传值+std::move相比如何?

据看来,关于C++0x的rvalue的主要建议是在类中添加移动构造函数和移动赋值运算符,直到编译器自动实现它们。 但如果你使用VC10,等待不是一个明智的策略,因为自动生成可能要等到VC10 SP1,或者在最坏情况下,VC11。很可能,等待这一点将需要数年时间。 这就是我的问题所在。编写所...