有没有办法让“make_unique <T []>”可以转发参数的T构造?

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

我有一个数组同一类的某些对象指出通过的unique_ptr,每个对象只能与明确的构造函数创建,因为几个参数必须传递给构造。

当初始化时,我要创建这样一个的unique_ptr如下:

unique_ptr<ClassA [ ] >  arrayA = make_unique<ClassA [ ]>(100, some args to be passed );

但它看起来像没有版本make_unique可以如上这么做。根据文档:如果make_unique正在一个阵列,它仅需要一个参数是所述数组的大小。

我不能在这个场景中使用矢量,作为ClassA的是正在被多个线程(productors / cosumers)共享一个消息队列,而如果空间不够向量将元件移动到一个新位置。

有另一种方式,在它我可以只具有明确的构造函数的类的阵列?在同一时间,我还是想用的unique_ptr来管理它们。

谢谢!

c++ arrays initialization unique-ptr
2个回答
0
投票

您不必使用make_unique,您可以构建指针,并通过一些手动分配的内存。

class ClassA {
 public:
  int a;
  float b;
};

const auto x = std::unique_ptr<ClassA[]>{new ClassA[2]{{1, 2}, {1, 2}}};

0
投票

我认为@AchimGuetlein提出的想法是更好的。

定义如下:

vector<unique_ptr<ClassA> > container;

for (i = 0; i<number of queues; ++i)
    container.emplace_back(make_unique<ClassA>(args to constructor of ClassA));

代替 :

unique_ptr<ClassA [] > ques = make_unique<ClassA [] >(n, ...);

虽然向量的元素可能被移动,没有移动发生到我的队列。该OBJ文件刚搬来是自我的unique_ptr,但队列的地址将永远不会改变。

对不起,我犯它作为一个答案,因为代码示例不能正常显示在评论小码。

© www.soinside.com 2019 - 2024. All rights reserved.