Mak*_*hin 3 c++ std shared-ptr c++17
所以,我有一个问题,我找不到答案。在 C++ 中,共享指针有一个可以包含原始数组的构造函数(例如 std::shared_ptr<int[]>)。
与 std::array 或 std::vector 相比,使用它有什么好处?
尝试搜索,询问gpt。至于 std::vector,有人建议可以使用 std::shared_ptr 来避免内存分配,但这并不能解释为什么在存在 std::array 时使用它
与所有其他列出的选项不同,std::array需要在编译时知道大小,并且不将元素存储在堆上(除非它本身位于堆上)。
std::vector<T>可以使用编译时未知的大小,在这种情况下应该是您的默认选择。它始终将元素存储在堆上。
std::unique_ptr<T[]>可以被认为是一种精简的std::vector。它不知道它的大小,这节省了一点点内存(sizeof(std::unique_ptr<T[]>)通常是sizeof(void *),而sizeof(std::vector<T>)通常是3 * sizeof(void *))。
因为它不存储其大小,所以它可以立即执行的操作很少:无法复制(只能移动),无法插入或删除元素等。您可以手动完成所有这些操作如果你单独存储尺寸,那么就需要std::vector额外的步骤。
std::shared_ptr<T[]>添加了一个额外的功能std::unique_ptr<T[]>- 共享所有权,就像任何其他std::shared_ptr<??>.