【发布时间】:2019-01-29 06:20:18
【问题描述】:
我在一个由 unique_ptr 指向的数组中有一些相同类的对象, 并且每个对象只能使用显式构造函数创建,因为必须将一些参数传递给构造函数。
初始化的时候,我要创建这样一个unique_ptr,如下:
unique_ptr<ClassA [ ] > arrayA = make_unique<ClassA [ ]>(100, some args to be passed );
但似乎没有任何版本的 make_unique 可以像上面那样做。 根据文档:如果 make_unique 正在制作一个数组,它只需要一个参数,即数组的大小。
我不能在这个场景中使用向量,因为 ClassA 是一个由多个线程(生产者/消费者)共享的消息队列, 而vector会在空间不足时将元素移动到新的地方。
还有另一种方法,我可以在其中创建一个只有显式构造函数的类的数组吗? 同时,我还是想用 unique_ptr 来管理它们。
谢谢!
【问题讨论】:
-
使用
std::vector来管理它们怎么样? -
谢谢。但是我的班级是不可移动的。它实际上是一个消息队列,由生产者和消费者共享。如果空间不足,Vector 会移动元素,但是有多个线程正在读/写队列。所以我不能使用向量。
-
我真的不明白线程与此有什么关系。在您完成创建它之前,没有线程会访问该数组(否则您有一个严重的设计缺陷)。因此,只需提前创建向量(正如您显然打算在这里做的那样),一旦可用就不要添加或删除元素。
-
std::vector的std::shared_ptr怎么样? -
如果空间不足,vector 会将元素移动到新位置:如果空间不足,
unique_ptr也有问题。只需在创建线程之前或仅在单个线程中调整向量的大小。
标签: c++ arrays initialization unique-ptr