0 c++ smart-pointers undefined-behavior
免责声明:我知道不应该使用unique_ptr,但为了便于理解,我想知道这里发生了什么.谢谢!
考虑这个功能:
void foo(int* a) {
unique_ptr<int> pointer_in_function(a);
}
Run Code Online (Sandbox Code Playgroud)
而这个主要功能:
int main(void) {
int* myInt = new int(5);
unique_ptr<int> pointer_in_main(myInt);
foo(myInt);
cout << *pointer_in_main << endl;
cout << *pointer_in_main << endl;
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我一直从第一个cout得到正确的答案.第二个是未定义的.该程序有时会在退出时出现严重错误而崩溃,但并非总是如此.
我不明白为什么第一个cout一致地给出了正确的答案.当pointer_in_function超出范围时,myInt指向的整数是否应该被删除?谢谢您的帮助!
编辑:顺便说一句,为了确保,我在假设调用foo应该删除我的整数是正确的,因为pointer_in_function超出了范围?
小智 5
我不明白为什么第一个cout一致地给出了正确的答案.
大多数实现在删除或将其返回到操作系统后都不会清除内存,因此如果在删除后快速检查内存,则其未被覆盖的可能性会更高.
这是未定义行为的有效后果之一.它可能是100%可预测的特定实现,但它不需要在其他实现上表现相同.