[英]Is there a use case for std::unique_ptr<std::array<T,N>>
我遇到过类似的东西:
using arr_t=std::array<std::array<std::array<int,1000>,1000>,1000>;
std::unique_ptr<arr_t> u_ptr;
显然,使用唯一指针来克服stackoverflow问题。 有没有使用前面的代码而不只是使用std::vector
? 是否存在std::unique_ptr<std::array<T,N>>
的真实用例?
上面的代码生成一个十亿个元素的连续缓冲区,使用[]
访问权限可以将元素作为三维1000面元素。
向量向量的向量将是由指针和所有权语义链接的一大堆非连续缓冲区。
我怀疑你在暗示
using u_ptr=std::vector<std::array<std::array<int,1000>,1000>>;
然后在创建arr_t
大小调整为1000
。 这在handle对象中有额外的2指针开销的适度成本。 它还允许变化的大小,这意味着确保它是固定大小的,这是用户代码必须确保的。 你想要阻止一堆方法,基本上所有unique_ptr
都不公开,以确保安全,或审计你的代码不使用它们中的任何一个。
其中一些操作可能非常昂贵; .push_back({})
会重新分配一个千兆字节。
现在,也许你打算不会打电话给那个; 但是如果你有处理向量的通用代码,你必须审核所有这些代码以确保它们都不会执行这些操作。 对于无法调整大小的vector
,不可能有一个非const句柄,例如,此时没有roll-your-own-span-class。
我们可以阻止我们不希望使用私有继承和using
语句公开的方法,但是此时我们最终完成了大部分工作以回到unique_ptr
解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.