kes*_*Him 2 c++ arrays smart-pointers
我目前正在学习智能指针并尝试执行以下操作:
#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;
}
Run Code Online (Sandbox Code Playgroud)
此代码只是将 5 个std::string对象扫描到一个数组中。但是,调试器显示没有为 5 个对象保留内存:
我究竟做错了什么?
它是由new std::string[5]动态数组分配这一事实引起的,因此它没有(固定/定义/可计算)大小(如果您在分配前不保存它),事实上
auto p = new std::string[5];
std::cout << sizeof(p);
Run Code Online (Sandbox Code Playgroud)
会打印 8出一个指针的大小。
因此调试器将其ptr视为一个指针,并且无法确定在第一个元素之后还有其他 4 个元素(因此无法确定它是 an array,而不仅仅是 apointer到 astring)
似乎这是一个“C++ POV”,并且调试器可以有更多信息,因此应该能够弄清楚它是一个数组string而不仅仅是一个pointer to string(感谢@Konrad Rudolph)