12得票2回答
为什么当T类型无法进行移动构造时,std::optional的移动构造函数没有被删除?

根据标准,std::optional<T> 的拷贝构造函数: ...如果 is_copy_constructible_v<T> 为 true,则定义为删除。 但是,std::optional<T> 的移动构造函数: ...如果 is_move_c...

113得票5回答
在C++中,如何处理可移动类型的互斥锁?

按照设计,std::mutex 不可移动也不可复制。这意味着一个拥有互斥锁的类 A 将不会接收默认移动构造函数。 我该如何以线程安全的方式使这种类型 A 可移动?

30得票6回答
通过调用移动赋值运算符来实现移动构造函数

MSDN文章《如何编写移动构造函数》提供了以下建议。如果为类提供了移动构造函数和移动分配运算符,则可以通过编写移动构造函数来调用移动分配运算符以消除冗余代码。以下示例展示了一个修订后的移动构造函数版本,该版本调用移动分配运算符:// Move constructor. MemoryBlock(...

8得票1回答
提供仅移动构造函数是否不合适?

我希望从函数中返回一个不可复制的Foo类型对象。这基本上是一个辅助对象,调用者将使用它执行一系列操作,并在操作完成后使用析构函数进行一些清理。 在出现右值引用之前,我可能会返回shared_ptr<Foo>或类似的东西。有了右值引用,另一个选择是使构造函数和复制构造函数为私有,并...

7得票3回答
C++11移动构造函数用于类似联合体的类

如何更好地为类似 union 的类构建移动构造函数?如果我有一个类似以下代码的 union 类,是否有一种构建类或移动构造函数的方式,不需要像下面代码中的移动构造函数那样使用 switch 语句。 class S { private: enum {CHAR, INT,...

30得票4回答
移动构造函数和静态数组

我一直在探索C++中移动构造函数的可能性,想知道在下面这个示例中利用此功能的一些方法。请考虑以下代码:template<unsigned int N> class Foo { public: Foo() { for (int i = 0; i < N;...

12得票3回答
偷窃移动构造函数内部的数据

在实现一个玩具类的移动构造函数时,我注意到了一个模式:array2D(array2D&& that) { data_ = that.data_; that.data_ = 0; height_ = that.height_; that.heig...

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

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

7得票1回答
移动构造函数的行为

我最近在移动构造函数中发现了一些奇怪的行为(从我的角度来看很奇怪)。使用GCC和Visual Studio编译时,结果是不同的。我想听听这种行为的解释,不认为这是一个错误,但可能是特定于编译器的。 考虑以下代码: #include <iostream> #include &lt...

31得票5回答
显式移动构造函数?

explicit关键字建议用于可以接受一个参数的所有大多数构造函数,但不包括拷贝构造函数。 对于拷贝构造函数,它有一定的用途(禁止通过函数调用、返回等方式进行隐式复制),但这通常并不是所需的。 那么移动构造函数呢?有什么合理的使用情况使它们变得显式吗?在这里应该遵循什么样的最佳实践?