例如,std::unique_ptr
就支持数组:
std::unique_ptr<int[]> p(new int[10]);
可能使用std::vector
或std::array
更方便。
你觉得这种结构有什么用吗?
有些人没有办法使用std::vector
,即使有分配器。有些人需要一个动态大小的数组,所以std::array
被淘汰。有些人从其他已知会返回数组的代码中获取数组;而这些代码不会被改写成返回`vector'或其他东西。
通过允许unique_ptr<T[]>
,你可以满足这些需求。
简而言之,当你需要的时候,你可以使用unique_ptr<T[]>
。当其他方法不能满足你的需要时。它是一种最后的工具。
一个std::vector
可以被复制,而unique_ptr<int[]>
允许表达数组的唯一所有权。另一方面,std::array
需要在编译时确定大小,这在某些情况下可能是不可能的。
我使用unique_ptr<char[]>
来实现游戏引擎中的预分配内存池。这个想法是提供预分配的内存池,代替动态分配,用于返回碰撞请求结果和其他东西,如粒子物理学,而不必在每一帧分配/释放内存。在这种情况下,你需要内存池来分配寿命有限的对象(通常是一帧、两帧或三帧),不需要销毁逻辑(只需要删除内存),这非常方便。