【发布时间】:2019-07-09 12:46:26
【问题描述】:
如何在 std::containers(std::vector 或 std::array)和指向数组的智能指针之间做出选择
我知道容器是内存管理的对象。它们是异常安全的,不会有任何内存泄漏,它们还为内存管理(push.back 等)提供了真正的功能,智能指针也是不会泄漏内存的指针,因为它们在不再需要它们时会删除它们(超出范围时就像 unique_ptr 一样)。可能在容器中每次创建它们都会产生开销。
我的问题是如何决定使用哪种方法以及为什么。
std::vector <unsigned char>myArray(3 * outputImageHight * outputImageWidth);
std::unique_ptr<unsigned char[]>myArray(new unsigned char[3 * outputImageHight * outputImageWidth]);
【问题讨论】:
-
始终默认为容器,在 99.99% 的情况下它都是正确的。
-
除非您测量性能下降,因为您有一些在原始
unique_ptr中不存在的东西。那就是 0.01%。 -
请用文字代替图片。
-
@MatthieuBrucher 而性能下降是该程序的三大瓶颈。
-
所以数组的智能指针只存在于 0.01% 的情况
标签: c++ containers smart-pointers