【发布时间】:2016-07-29 01:59:47
【问题描述】:
我有固定数量的 T 类对象,这些对象不可复制且不可默认构造。由于大小是固定的,我想使用像std::array 这样的数组容器,而不是unique_ptr 或vector。如果可以的话,我想避免额外的间接层。
如何初始化std::array<T, 2>?使用array<T, 2> {T(...), T(...)} 会导致有关已删除复制构造函数的错误。使用array<T, 2> {move(T(...)), move(T(...))} 不会强制数组元素使用移动构造函数。如果std::array<T, 2> 本身不起作用,我还能做些什么而不求助于额外的间接层或像placement-new 这样的手动内存管理技术?
【问题讨论】:
-
在我看来,所有的 T 实例都应该只能通过智能指针访问。
std::array的唯一/共享 ptrs 到 T 等... -
@SamVarshavchik,但是您可以将
std::vector与仅移动、不可默认构造的类型一起使用。 -
我想要完成的事情原则上可以完成,尽管使用诸如放置新的混乱和难以阅读的技术。我知道向量会很简单,但它给了我额外的开销,我打算避免原则上是完全可以避免的。
-
你考虑过使用元组吗?
-
我想访问带有索引的元素。
标签: c++