使用 std::unique_ptr 创建对象数组

Create an array of objects using std::unique_ptr

我目前正在学习智能指针并正在尝试执行以下操作:

#include <memory>
#include <string>

int main() {
    std::unique_ptr<std::string[]> str_array(new std::string[5]);
    for (int i = 0; i < 5; i++) {
        std::getline(std::cin, str_array.get()[i]);
    }
    return 0;
}

此代码只是将 5 个 std::string 个对象扫描到一个数组中。 但是,调试器显示没有为 5 个对象保留内存:

我做错了什么?

这是因为new std::string[5]是一个动态数组分配,所以它没有(fixed/defined/calculable)大小(如果你在分配前不保存它),事实上

auto p = new std::string[5];
std::cout << sizeof(p);

将打印 8,即指针的大小。

所以调试器将 ptr 视为一个指针,并且无法弄清楚第一个元素之后还有其他 4 个元素(因此无法弄清楚那是一个 array,而不仅仅是 pointerstring)

似乎这是一个“C++ POV”,调试器可以有更多的信息,所以应该能够弄清楚它是一个 string 的数组,而不仅仅是一个 pointer to string(感谢@Konrad Rudolph