有没有办法让"make_unique< T[ ] >"可以将参数转发给 T 的构造函数?
Is there a way to let "make_unique< T[ ] >" can forward arguments to constructor of T?
我在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来管理它们。
谢谢!
你不必使用 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, ...);
尽管矢量的元素可能会被移动,但我的队列没有发生移动。移动的对象只是unique_ptr自己,但队列的地址永远不会改变。
很抱歉将其作为答案提交,因为代码示例无法在注释中优雅地显示为 codelet。
相关文章:
- 是否可以在不扣除的情况下将模板参数转发到 make_*?
- 可变参数模板参数转发使用逗号运算符
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 将可变参数函数参数转发到 std::function 对象
- 我如何实现变异模式以将可变数量的参数转发到C 11中的函数
- 无临时实例的参数转发
- 如何将构造函数参数转发到 boost::optional
- 如何使包装类将其构造函数参数转发到 std::vector 的构造函数?
- 如何将 CMake 参数转发到外部项目
- 使用std::forward而不是将参数转发到另一个函数
- 使用declard和参数转发构造函数隐式复制结构
- 将可变参数模板参数转发到多个类成员
- Template()的参数转发使构造函数参数变为常量
- 我怎样才能完美地将参数转发到 STL 集合
- 如何在 C++11 中使用可变参数模板正确创建显式参数转发函数
- 使用默认参数转发引用
- 将可变模板参数转发到类似printf的函数
- static_cast的参数转发
- Boost.Program_options:将"--"后面的参数转发到另一个程序
- 将参数转发给模板成员函数