c++ - 使用 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]
是一个动态数组分配,因此它没有(固定/定义/可计算)大小(如果您在分配之前不保存它),事实上
auto p = new std::string[5];
std::cout << sizeof(p);
将打印8
指针的大小。
因此调试器将其ptr
视为一个指针,并且无法确定在第一个元素之后还有其他 4 个元素(因此无法确定这是 an array
,而不仅仅是 apointer
到 a string
)
似乎这是一个“C++ POV”,调试器可以拥有更多信息,因此应该能够弄清楚它是一个数组,string
而不仅仅是一个pointer to string
(感谢@Konrad Rudolph)
推荐阅读
- rest - Openshift - 在同一命名空间中调用另一个 API
- python-3.x - Python:分离字符串的东西
- python - 从一个二维数组中随机选择一对元素,并将它们放在python中的一个句子中
- python - 网页抓取的字符串不能在 for 循环外调用
- python - 输入填充颜色 Python turtle 未执行
- database - 新的自定义应用程序 - 使用关系数据库还是非关系数据库?
- python - 如何在 python 中检测 APNG?
- xamarin.android - 更多选项卡 - tabbedRenderer(自动更多选项卡中的自定义项目列表)
- python - 禁用 Slider 中的箭头键
- php - Laravel 下拉列表恢复存储在数据库中的旧值和数据