gpt4 book ai didi

c++ - unique_ptr 超出结构范围

转载 作者:行者123 更新时间:2023-11-28 05:24:17 25 4
gpt4 key购买 nike

我的代码是这样的,在一个名为 uniqueptr_scope.cpp 的文件中

#include<iostream>
#include<memory>
#include<vector>

struct un{
int i;
};

struct un2{
int i;

void testTheUN(){
temp->i=1000;
}

void main2(){
un u;
temp = std::unique_ptr<un>(&u);
std::cout<<temp->i<<"\n";
testTheUN();

}
private:
std::unique_ptr<un> temp;
};


int main(){


un2 u;
u.main2();


}

我用这个编译g++ -std=c++1y uniqueptr_scope.cpp

回到我的问题:我想检查类或结构中唯一指针的范围。但是当我运行代码时,我得到的输出是

-650998192
*** Error in `./a.out': free(): invalid pointer: 0x00007fffd9328e40 ***
Aborted (core dumped)

所以在 un2::main2() 函数中,temp 被初始化并被分配了一些值。然后,当我调用 testTheUN() 时,unique_ptr 超出范围。因为我已经创建了一个类级别的 unique_ptr ,默认情况下范围应该是类的。

假设 unique_ptr 的作用域是 main2() 即使 main2 还没有完全退出,因此不应该调用 unique_ptr 的析构函数!这就是我的困惑!

注意:使用 g++ 4.8 编译器(在 Ubuntu 仓库中是最新的)所以必须给出“c++1y”标准

最佳答案

行后

un u;
temp = std::unique_ptr<un>(&u);

temp 是一个指向 &uunique_ptr。函数返回后,temp下的指针为悬垂指针。

使用

un u;
temp = std::make_unique<un>(u);

相反。

关于c++ - unique_ptr 超出结构范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40857570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com