首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当原始指针和唯一指针都引用同一个对象时,如何避免双重释放?

当原始指针和唯一指针都引用同一个对象时,如何避免双重释放?
EN

Stack Overflow用户
提问于 2019-07-22 02:25:33
回答 1查看 169关注 0票数 0

在下面的代码中,x(原始pinter)和p(唯一指针)都指向变量a;因此,值“a”的更改反映了两个指针的取消引用。我知道“p”拥有&a的所有权。我试图理解指针超出作用域时的行为,哪个指针最先被释放?我如何避免双重释放?

代码语言:javascript
复制
#include <iostream>
#include <memory>

int main() {
    int a = 5;

    int *x = &a;
    std::unique_ptr<int> p(&a);

    *p = 6;
    std::cout<< *x << *p <<'\n';
    // prints 66
    *x =7;
    std::cout <<*x <<*p <<"\n";
    // 77

    std::cout  << "Done!"<<'\n';
}

附注:我得到这个运行时错误“释放的指针没有被分配”

EN

回答 1

Stack Overflow用户

发布于 2019-07-22 02:28:36

std::unique_ptr<int> p(&a);只是一个bug,因为a是一个自动变量,当它超出作用域时,它将被销毁。您刚刚创建了一种情况,在这种情况下,unique_ptr也会尝试销毁同一对象。不要那样做。

您似乎认为,如果您形成一个现有对象的unique_ptr,那么新的unique_ptr将独占该对象。这是错误的。

另外,原始指针在被销毁时不会删除它们所指向的内容。这与你的原始指针无关。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57135892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档