unique_ptr 超出结构范围
unique_ptr is going out of scope within a struct
我的代码是这个,在一个名为 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
回答我的问题:
我想检查 class 或结构中的唯一指针的范围。但是当我是 运行 代码时,我得到的输出是
-650998192
*** Error in `./a.out': free(): invalid pointer: 0x00007fffd9328e40 ***
Aborted (core dumped)
所以在 un2::main2()
函数中,temp 被初始化并被分配了一些值。然后,当我调用 testTheUN()
时,unique_ptr 超出范围。由于我创建了 class 级别 unique_ptr ,默认情况下范围应该是 class 。
假设 unique_ptr 的作用域是 main2()
即使这样 main2 还没有完全退出,因此不应该调用 unique_ptr 的析构函数!
这就是我的困惑!
注意:使用 g++ 4.8 编译器(在 Ubuntu repo 中是最新的)所以必须给出 "c++1y" std
行后
un u;
temp = std::unique_ptr<un>(&u);
temp
是指向 &u
的 unique_ptr
。在函数returns之后,temp
下的指针是悬空指针
使用
un u;
temp = std::make_unique<un>(u);
相反。
我的代码是这个,在一个名为 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
回答我的问题: 我想检查 class 或结构中的唯一指针的范围。但是当我是 运行 代码时,我得到的输出是
-650998192
*** Error in `./a.out': free(): invalid pointer: 0x00007fffd9328e40 ***
Aborted (core dumped)
所以在 un2::main2()
函数中,temp 被初始化并被分配了一些值。然后,当我调用 testTheUN()
时,unique_ptr 超出范围。由于我创建了 class 级别 unique_ptr ,默认情况下范围应该是 class 。
假设 unique_ptr 的作用域是 main2()
即使这样 main2 还没有完全退出,因此不应该调用 unique_ptr 的析构函数!
这就是我的困惑!
注意:使用 g++ 4.8 编译器(在 Ubuntu repo 中是最新的)所以必须给出 "c++1y" std
行后
un u;
temp = std::unique_ptr<un>(&u);
temp
是指向 &u
的 unique_ptr
。在函数returns之后,temp
下的指针是悬空指针
使用
un u;
temp = std::make_unique<un>(u);
相反。