std::unique_ptr<std::array<T,N是否有用例>>

Is there a use case for std::unique_ptr<std::array<T,N>>

本文关键字:std gt lt 是否 有用 array ptr unique      更新时间:2023-10-16

我遇到了类似的东西:

using arr_t=std::array<std::array<std::array<int,1000>,1000>,1000>;
std::unique_ptr<arr_t> u_ptr;

显然,使用了独特的指针来克服堆叠量问题。是否有任何情况可以使用以前的代码,而不仅仅是使用std::vectorstd::unique_ptr<std::array<T,N>>吗?

有实际用例

上面的代码生成了一个十亿个元素的连续缓冲区, []访问可以使您可以作为3维1000个侧面的立方体获得元素。

矢量的向量将是一堆由指针和所有权语义连接的无连锁缓冲区。

我怀疑您建议您

using u_ptr=std::vector<std::array<std::array<int,1000>,1000>>;

然后将上述arr_t调整为1000一旦创建。这在手柄对象中具有额外的2个指针开销的适度成本。它还允许尺寸变化,这意味着确保其固定大小按预期是用户代码必须确保的东西。您需要 block 一堆方法,基本上所有unique_ptr都没有暴露,以确保安全或审核您的代码不使用它们。

其中一些操作可能非常昂贵;.push_back({})将重新分配一个千兆字节。

现在,也许您打算永远不会称呼它;但是,如果您具有处理向量的通用代码,则必须审核其中的所有,以确保所有操作都不执行这些操作。在此时,如果没有滚动式跨度级别的情况,则无法对vector进行非const句柄。

我们可以阻止我们不想用私有继承和using语句展示的方法,但是此时,我们最终完成了大部分工作以返回unique_ptr解决方案。