这个成语是什么,什么时候应该使用?它解决了哪些问题?当使用C++ 11时,成语是否会改变?
虽然在许多地方已经提到过,但我们没有任何单一的"它是什么"问题和答案,所以在这里.以下是前面提到的地方的部分列表:
c++ c++-faq copy-constructor assignment-operator copy-and-swap
我有一个std::vector特定类的对象A.该类非常重要,并且定义了复制构造函数和移动构造函数.
std::vector<A> myvec;
Run Code Online (Sandbox Code Playgroud)
如果我用A对象填充向量(使用例如myvec.push_back(a)),则向量将增大,使用复制构造函数A( const A&)来实例化向量中元素的新副本.
我可以以某种方式强制执行类的移动构造函数A而不是使用它吗?
嗨我使用gcc 4.7创建了一个带有noexcept移动构造函数的类Foo,并将向量保留大小设置为2,这样在添加第3项时就必须重新分配大小.在执行此操作时,它似乎正在调用复制构造函数而不是移动构造函数.我在这里错过了什么吗?
#include <vector>
#include <iostream>
class Foo
{
public:
Foo(int x) : data_(x)
{
std::cout << " constructing " << std::endl;
}
~Foo()
{
std::cout << " destructing " << std::endl;
}
Foo& operator=(const Foo&) = default;
Foo& operator=(Foo&&) = default;
Foo(Foo&& other) noexcept : data_(std::move(other.data_))
{
std::cout << " Move constructing " << std::endl;
}
Foo(const Foo& other) noexcept : data_(other.data_)
{
std::cout << " Copy constructing " << std::endl;
}
private:
int data_;
};
int main ( …Run Code Online (Sandbox Code Playgroud)