21得票1回答
使用成员std::vector的移动语义

抱歉如果之前已经有人问过了,但是据我所知,在C++11中,std::vector拥有一个移动构造函数,这样在某些情况下,比如返回一个值时,复制的代价几乎为零。然而,如果我有一个像这样的类,其中有一个vector作为成员变量:class MyClass { public: MyClass...

20得票3回答
为什么移动构造函数需要其成员的默认构造函数?

我试图为一个没有复制构造函数的类实现移动构造函数。但是我收到了一条错误消息,说该类成员的默认构造函数缺失。 下面是一个简单的示例来说明这个问题:struct A { public: A() = delete; A(A const&) = delete;...

19得票2回答
为什么这段代码尝试调用复制构造函数?

我刚刚花费了很长时间来解决Visual Studio中的编译错误。我将代码压缩成下面这个简单的可编译示例,并在IdeOne上尝试运行,得到了相同的错误,您可以在这里查看。 我想知道为什么以下代码尝试调用B(const B&)而不是B(B&&):#include &lt...

19得票2回答
vector::push_back坚持使用拷贝构造函数,尽管已经提供了移动构造函数。

我从gcc收到一个奇怪的错误,但无法弄清楚原因。我编写了以下示例代码,以便更清楚地说明问题。基本上,我定义了一个类,并将其复制构造函数和复制赋值运算符设为私有,以防止意外调用它们。 #include <vector> #include <cstdio> using s...

18得票3回答
如何检查移动构造函数是否被隐式生成?

我有几个类需要检查是否生成了默认移动构造函数。是否有一种方法可以检查这一点(无论是编译时断言,还是解析生成的目标文件,或其他方法)? 激励性例子: class MyStruct : public ComplicatedBaseClass { std::vector<std...

18得票3回答
移动构造函数和多重继承

概要 当一个类使用多重继承时,如何安全地设计移动构造函数? 详情 考虑以下情况: struct T { }; struct U { }; struct X : public T, public U { X(X&& other) : T(std::m...

16得票1回答
如何返回一个没有复制构造函数的对象

我的问题涉及如何返回一个没有复制构造函数的对象。例如,假设我有一些位于堆中的bigResource,并且我使用unique_ptr来跟踪它。现在假设我把这个资源的所有权交给了一个毛毛虫。那么我就有了一个名为CaterpillarWithBigResource的对象。现在,在某个时刻,这个Cat...

16得票3回答
为什么在移动构造函数中需要将rvalue引用设置为null?

//code from https://skillsmatter.com/skillscasts/2188-move-semanticsperfect-forwarding-and-rvalue-references class Widget { public: Widget(Widg...

15得票3回答
移动构造函数调用基类的移动构造函数

我有一个基类,基本上将一个类附加到任意窗口句柄(例如HWND,HFONT)上,并使用策略类进行附加/分离和销毁:// class SmartHandle template<typename THANDLE, class TWRAPPER, class TPOLICY> class ...

15得票1回答
如何调用移动构造函数?

在下面的代码中,我如何在主函数中将右值分配给对象A?#include <iostream> using namespace std; class A { public: int* x; A(int arg) : x(new int(arg...