2369得票5回答
什么是copy-and-swap惯用语?

什么是copy-and-swap惯用语法,什么时候应该使用它?它解决了哪些问题?在C++11中有什么变化吗? 相关内容: - [你最喜欢的C++编码风格惯用语法:Copy-swap](link1) - [C++中的拷贝构造函数和=运算符重载:是否可能有一个通用函数?](link2) - [...

214得票2回答
公共友元交换成员函数

在对拷贝并交换惯用法的精美回答中,有一段代码我需要一点帮助:class dumb_array { public: // ... friend void swap(dumb_array& first, dumb_array& second) // nothrow ...

77得票4回答
为什么有些人在移动赋值时使用交换(swap)?

例如,stdlibc++拥有以下内容:unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*...

34得票2回答
什么是复制省略,它如何优化复制交换惯用语?

我正在阅读“拷贝并交换”。 我试着阅读一些关于“拷贝省略(Copy Elision)”的链接,但是没有完全明白它的含义。有人可以解释一下这个优化是什么意思吗,特别是以下文字是什么意思: 这不仅是方便的问题,实际上是一种优化。如果参数(s)绑定到一个左值(另一个非 const 对象),...

34得票3回答
移动赋值与标准复制交换不兼容。

测试新的移动语义。我刚刚问了一个有关移动构造函数的问题。但是在评论中,事实证明问题实际上是当您使用标准的“复制和交换”惯用语时,“移动赋值”运算符和“标准赋值”运算符会发生冲突。这是我正在使用的类:#include <string.h> #include <utility&g...

29得票1回答
何时使用过载引用传递(l-value和r-value)优于值传递?

我看到有人说在 C++11 中,编写以同一类型参数为值的operator=可同时充当复制赋值运算符和移动赋值运算符: Foo& operator=(Foo f) { swap(f); return *this; } 如果采用另一种方法,可能需要两倍以上的代码行数,...

28得票3回答
四(加半个)的规则是什么?(关于IT技术的问题)

为了正确处理对象复制,原则是三法则。在C++11中,移动语义是一种技术,所以现在是五法则。然而,在这里和互联网上的讨论中,我也看到了参考四个半法则的内容,它是五个法则和复制-交换惯用法的组合。 那么,什么是四个半法则?哪些函数需要被实现,每个函数的主体应该是什么样子的?哪个函数是半个?与五个...

28得票2回答
复制和移动习语?

通过使用复制和交换习语,我们可以轻松实现具有强异常安全性的复制赋值: T& operator = (T other){ using std::swap; swap(*this, other); return *this; } 然而,这需要T是可交换的Swa...

26得票3回答
C++11中,Copy-and-Swap习惯用法是否应该变成Copy-and-Move习惯用法?

如 这个答案 所解释的那样,复制并交换技巧的实现如下: class MyClass { private: BigClass data; UnmovableClass *dataPtr; public: MyClass() : data(), dataPt...

19得票2回答
如何在使用复制交换技法的赋值操作符中使用noexcept?

移动赋值运算符通常应该声明为noexcept(即在STL容器中存储类型)。但是,复制并交换惯用法允许定义单个代码段中的复制和移动赋值运算符。在这种情况下,如何处理noexcept限定符?复制构造函数可能会抛出异常,但我怀疑它是否违反noexcept限定符。 // Is it correct ...