我有一个既不能复制也不能移动的结构,它也没有默认构造函数:
struct Data {
int a;
Data(const Data&) = delete;
Data& operator=(const Data&) = delete;
Data(Data&&) = delete;
Data& operator=(Data&&) = delete;
Data(int i):
a{i}
{}
};
我想在堆中分配一个由这些结构组成的数组,并使用相同的构造函数构造所有这些结构。我设法通过以下方式完成此任务:
Data* ppd = (Data*)::operator new(10 * sizeof(Data));
for (auto p = ppd; p < ppd + 10; ++p)
new(p) Data{45};
但是我对此非常不满意。显然我查看了此参考资料,但我找不到我要找的东西。
您对以更具表现力的方式完成我的任务有什么建议吗?
是什么阻止您使用
std::vector
和 emplace_back
来调用我们的自定义构造函数?
std::vector<Data> vec;
for (unsigned i = 0; i < 10; ++i) {
vec.emplace_back(45);
}