gpt4 book ai didi

c++ - 使用 std::unique_ptr 创建对象数组

转载 作者:行者123 更新时间:2023-12-01 14:37:12 24 4
gpt4 key购买 nike

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

#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 个对象保留:

the debugger

我做错了什么?

最佳答案

这是由于 new std::string[5] 是动态数组分配,因此它没有(固定/定义/可计算)大小(如果您不保存它在分配之前),事实上

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

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

因此调试器将 ptr 视为一个指针,并且无法弄清楚第一个元素之后还有其他 4 个元素(因此无法弄清楚这是一个 数组,而不仅仅是指向字符串指针)

看起来这是一个“C++ POV”,调试器可以有更多信息,因此应该能够弄清楚它是一个 string 数组,而不仅仅是一个 指向字符串的指针(感谢@Konrad Rudolph)

关于c++ - 使用 std::unique_ptr 创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62978801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com