我有一个数组同一类的某些对象指出通过的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来管理它们。
谢谢!
您不必使用make_unique
,您可以构建指针,并通过一些手动分配的内存。
class ClassA {
public:
int a;
float b;
};
const auto x = std::unique_ptr<ClassA[]>{new ClassA[2]{{1, 2}, {1, 2}}};
我认为@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,但队列的地址将永远不会改变。
对不起,我犯它作为一个答案,因为代码示例不能正常显示在评论小码。