结构体的堆分配,无需复制、移动和默认构造函数

问题描述 投票:0回答:1

我有一个既不能复制也不能移动的结构,它也没有默认构造函数:

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};

但是我对此非常不满意。显然我查看了此参考资料,但我找不到我要找的东西。

您对以更具表现力的方式完成我的任务有什么建议吗?

c++ c++11 new-operator
1个回答
0
投票

是什么阻止您使用

std::vector
emplace_back
来调用我们的自定义构造函数?

std::vector<Data> vec;
for (unsigned i = 0; i < 10; ++i) {
    vec.emplace_back(45);
}
© www.soinside.com 2019 - 2024. All rights reserved.