17得票2回答
为什么std::vector有两个赋值运算符?

自 2011 年以来,我们都同时拥有复制赋值和移动赋值。然而,这个答案相当有说服力地认为,对于资源管理类,只需要一个赋值运算符。例如,对于 std::vector 来说,它看起来会像这样:vector& vector::operator=(vector other) { swap(...

16得票2回答
使用swap实现移动赋值

我有一个想法,认为它是完全合理的,但我想听听其他人的意见,以防万一我漏掉了什么。首先,我对 T& operator=(T&& rhs) 的理解是,我们不关心 rhs 的内容,只要将其内容移动到this 中,并且 rhs 可以被安全地销毁。 话虽如此,如果交换操作很便宜...

13得票2回答
何时不能使用复制并交换惯用语(copy-and-swap idiom)?

在读完这个关于复制和交换惯用语的问题之后,我阅读了这个内容,并发现其中(2)下的说明:class_name & class_name :: operator= ( const class_name & ) (2) (2) 当不能使用复制并交换惯用语时,典...

11得票6回答
重复使用拷贝和交换惯用法

我正在尝试将复制和交换惯用法放入可重用的mixin中:template<typename Derived> struct copy_and_swap { Derived& operator=(Derived copy) { Derived* ...

10得票3回答
复制交换惯用语的低效性问题?

我正在测试一个类内部有一个std::vector数据成员的代码。该类既可以复制,也可以移动,并且使用拷贝交换技巧实现了operator=,具体请参见此处。 如果有两个vector,比如大容量的v1和小容量的v2,并且将v2复制到v1(v1 = v2),则分配给v1的大容量将保留。这是有意义的...

9得票1回答
C++11中使用std::move和copy and swap习惯用法时,'operator='的重载存在歧义。

我遇到了以下错误: [matt ~] g++ -std=c++11 main.cpp -DCOPY_AND_SWAP && ./a.out main.cpp: In function ‘int main(int, const char* const*)’: main.cpp:...

9得票3回答
安全赋值和拷贝交换技巧

我正在学习C++,最近在stackoverflow上了解到拷贝并交换惯用法,并对此有几个问题。假设我有以下使用拷贝并交换惯用法的类,仅供举例: class Foo { private: int * foo; int size; public: Foo(size_t size) ...

8得票3回答
在可移动且不可复制的类上使用移动和交换惯用法是否有意义?

如果我有一个类,例如 class Foo{ public: Foo(){...} Foo(Foo && rhs){...} operator=(Foo rhs){ swap(*this, rhs);} void swap(Foo &rh...

7得票4回答
使用纯虚类进行复制和交换习语

我正在尝试使用纯虚函数和“复制并交换”惯用语来实现虚拟类,但是我遇到了一些问题。由于我在类A的赋值运算符中创建了实例,其中包含纯虚函数,所以代码无法编译。 有没有办法同时使用纯虚函数和“复制并交换”惯用语? class A { public: A( string name) : ...