gpt4 book ai didi

c++ - 为什么这个智能指针在它的目标应该被删除时却给出了正确的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 15:33:07 25 4
gpt4 key购买 nike

免责声明:我知道这不是应该使用 unique_ptr 的方式,但为了便于理解,我想知道这里发生了什么。谢谢!

考虑这个函数:

void foo(int* a) {
unique_ptr<int> pointer_in_function(a);
}

这个主要功能:

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;
}

我总是从第一次计算中得到正确答案。第二个是未定义的。该程序有时在退出时出现严重错误而崩溃,但并非总是如此。

我不明白的是为什么第一个 cout 始终给出正确答案。当 pointer_in_function 超出范围时,不应该删除 myInt 指向的整数吗?感谢您的帮助!

编辑:顺便说一句,为了确定,我假设调用 foo 应该删除我的整数是正确的,因为 pointer_in_function 超出范围吗?

最佳答案

What I do not understand is why the first cout gives the correct answer consistently.

大多数实现不会在删除后清除内存或将其返回给操作系统,因此如果您在删除后快速检查内存,则它尚未被覆盖的可能性会更高。

这是未定义行为的有效后果之一。它在您的特定实现上可能是 100% 可预测的,尽管它不需要在其他实现上表现相同。

关于c++ - 为什么这个智能指针在它的目标应该被删除时却给出了正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43704201/

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