我想使用 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()
将在 vector 的末尾构造。
有没有一种方法可以放置默认构造。有没有办法像 map 那样使用分段构造或默认转发,也许使用 std::piecewise_construct
?例如,对于 map ,我们可以使用:
std::map<int,Test> obj_map;
int val = 10;
obj_map.emplace(std::piecewise_construct,
std::forward_as_tuple(val),
std::forward_as_tuple());
vector 有类似的东西吗?
最佳答案
vector::emplace_back()
will construct at the end of the vector but also require arguments.
参数包可以为空。因此可变参数模板 emplace_back
可以在没有参数的情况下调用;即
vector<VeryLimitedClass> vec;
vec.emplace_back();
是通过其默认构造函数初始化 VeryLimitedClass
类型对象并将其“放置”在 vec
后面的有效代码。
关于c++ - 使用默认构造函数在 vector 中放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27067868/