矢量安放我想用vector::emplace
默认构造不可复制和不可转让对象,然后使用迭代到新创建的对象使用对象的具体方法。请注意,没有该类的参数化构造函数只是默认的构造函数。一个简单的例子是:使用默认的构造函数
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
Test() {}
private:
Test(const Test&) = delete; // To make clas un-copyable.
Test& operator=(const Test&) = delete;
int a_;
};
int main() {
vector<Test> test_vec;
test_vec.emplace_back(); // <---- fails
return 0;
}
vector::emplace()
构造一个新的对象,但需要的参数,以一个非默认的构造函数。 vector::emplace_back()
将在向量的末尾构造。
有没有一种方法来安装默认构造。有没有一种方法可以使用分段结构或默认转发,可能使用std::piecewise_construct
,因为它具有地图功能?例如,在地图的情况下,我们可以使用:
std::map<int,Test> obj_map;
int val = 10;
obj_map.emplace(std::piecewise_construct,
std::forward_as_tuple(val),
std::forward_as_tuple());
有什么类似的向量?
您的类型是否可移动? – dyp 2014-11-21 18:45:41
是的,但它不可分配或可复制。请看一个例子[这里](http://ideone.com/49LKaP)。使用'emplace_back()'会导致编译错误。 – 2014-11-21 19:05:39
@RizwanC该错误是因为该类型不*可移动*。用户声明的复制构造函数禁止生成默认的移动构造函数。您需要声明一个默认的移动构造函数(如果愿意,还可以移动赋值),此时您不需要删除的复制操作,因为声明移动操作会抑制隐式生成副本。 – Casey 2014-11-21 19:06:21