c++ - 智能指针 - 堆栈分配变量的 unique_ptr

标签 c++ smart-pointers unique-ptr

我有以下简单的代码,我还没有找到一个线程,其中智能指针用于这种简单的情况,而是复制对象:

int main()
{
    int i = 1;

    std::unique_ptr<int> p1(&i);
    *p1 = 2;

    return 0;
}

当指针超出范围时,这会导致 _BLOCK_TYPE_IS_INVALID。如果我调用 p1.release(),代码工作正常并且我没有收到此错误。我认为这样的指针足够智能来处理悬挂指针?

另一种方法是,如果我有一份 i,它不会给出上述错误:

std::unique_ptr<int> p1(new int(i));

这里使用智能指针有什么好处,我不想执行本地复制?

如果我要使用原始指针:

int i = 1;
int *p1 = &i;
*p1 = 2;

我不会得到错误,即使我不编码:

p1 = nullptr;

最佳答案

std::unique_ptr 用于处理动态分配的内存;据说当您构造指针时,它们取得指针的所有权

您的 int i; 在堆栈上,因此不是动态分配的;它的所有权不能从堆栈中拿走。当 unique_ptr 析构函数试图 delete 您给它的指针时(因为它认为没有人再拥有它),您会收到该错误,因为 delete 可以仅用于使用 new 创建的指针。

鉴于您的简短示例,我不知道这是在什么上下文中......但是您应该为堆栈分配的变量使用原始指针(或如您所说的制作拷贝)。

关于c++ - 智能指针 - 堆栈分配变量的 unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41254412/

相关文章:

c++ - 如何在 Centos 6.5 上构建 freetype?

c++ - C++ 中有整数 fmod 函数吗?

linux - 什么时候适合在 GUI 中使用 C++ 智能指针(带有主循环的程序)

c++ - 默认初始化或检查是否为空

c++ - 在没有数组或 vector C++ 的情况下存储值

c++ - 在 C++ 中使用嵌套 vector

c++ - 为原始指针(如所有权语义)返回 unique_ptr 的坏习惯?

c++ - 是否可以使用非常量指针调用非常量函数,以及当两个 unique_ptr 指向同一个对象时程序将如何运行?

c++ - 何时使用 unique_ptr 而不是本地对象?

c++ - 在对象被销毁后释放一个 unique_ptr