我在一个由unique_ptr指向的数组中有一些相同类的对象, 每个对象只能使用显式构造函数创建,因为必须将一些参数传递给构造函数。
初始化时,我将创建如下的unique_ptr:
unique_ptr<ClassA [ ] > arrayA = make_unique<ClassA [ ]>(100, some args to be passed );
但是看起来像上面那样没有版本的make_unique可以做到。 根据docs所述:如果make_unique正在创建一个数组,则只需一个参数即可,即数组的大小。
在这种情况下,我不能使用vector,因为ClassA是由多个线程(生产者/消费者)共享的消息队列, 如果空间不足,vector会将元素移到新位置。
还有另一种方法,可以在其中创建仅具有显式构造函数的类的数组吗? 同时,我仍然想使用unique_ptr来管理它们。
谢谢!
答案 0 :(得分: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, ...);
尽管vector的元素可能会移动,但我的队列没有发生任何移动。移动的objs只是unique_ptr自身,但是队列的地址永远不会改变。
很抱歉将其作为答案提交,因为无法在注释中将代码示例优雅地显示为codelet。
答案 1 :(得分:0)
您不必使用<?xmlversion="1.0" encoding="UTF-8"?>
<PayloadList>
<Payload>
<IFXResp>
<IFX>
<GeneralStatus>
<StatusCode>0</StatusCode>
<StatusLevel>IFX</StatusLevel>
<StatusDesc>The request was processed successfully.</StatusDesc>
</GeneralStatus>
<Status>
<StatusCode>0</StatusCode>
<Severity>Info</Severity>
<StatusDesc>The request was processed successfully.</StatusDesc>
<SupportUID>DD2B1DFF-57657657-6767-8013-C9787878AF00</SupportUID>
</Status>
<SignonRs>
</IFX>
</IFXResp>
</Payload>
</PayloadList>
,可以构造指针并传递一些手动分配的内存。
make_unique