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

d4rk4ng31

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

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

调试器

我究竟做错了什么?

贝托99

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

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

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

因此,调试器将其ptr视为指针,无法确定第一个元素之后还有其他4个元素(因此无法确定是a array,而不仅仅是apointer到a string

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用typecast在unique_ptr中创建对对象的引用

std :: unique_ptr <T []>具有派生对象的数组,使用已删除的函数

对 std::unique_ptr 数组的赋值

使用C ++ std :: unique_ptr <>或std :: shared_ptr <>来管理Objective-C对象

我如何正确地使用unique_ptr和make_unique声明对象数组

使用unique_ptr的单例对象

使用unique_ptr的char的C ++数组

在 Qt 上使用 std::unique_ptr

奇怪的错误:当未真正创建指针时,使用删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr

从std :: unique_ptr数组获取原始指针数组

使用std :: function对象将自定义删除器传递给std :: unique_ptr

是否可以使用fill构造函数创建std :: vector <std :: unique_ptr <Bar >>?

使用已使用 new X() 创建的变量将 std::unique_ptr 传递给函数

使用什么std :: optional或std :: unique_ptr

在 QVector<std::unique_ptr<Type>> 上使用 std::find

当unique_ptr在向量中时,对std :: unique_ptr <>拥有的对象的引用/ ptr是否安全?

使用std :: unique_ptr <T>&代替std :: unique_ptr <T>有什么优势吗?

使用`unique_ptr`创建一个`map`

如何使用unique_ptr创建blob流?

如何使用静态删除器创建 unique_ptr

使用 std::unique_ptr 使用 CRTP 进行转换

使用 std::unique_ptr<T>::unique_ptr` 在 Visual Studio 2013 中构建错误

如何在std :: copy中使用unique_ptr?

如何使用std:unique_ptr擦除包含结构的向量?

我应该使用QScopedPointer还是std :: unique_ptr?

使用std :: move(nullptr)的unique_ptr的operator =的C ++错误

使用std :: unique_ptr时出现内存泄漏

一些std :: unique_ptr使用和“陷阱”

使用 std::move 分配 unique_ptr 不起作用