gpt4 book ai didi

c++ - 语句结束时暂时不会被破坏

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:10 24 4
gpt4 key购买 nike

这种行为是否始终得到保证?下面的代码使用临时 unique_ptr 创建一个 char* 指针。我认为 unique_ptr 应该在语句末尾被破坏。令我惊讶的是,char* 仍然指向有效内存。

void Fill(char* str, long len)
{
for(int i = 0; i < len; ++i)
str[i] = 'a';
}

char* x = std::unique_ptr<char[]>(new char[100]).get();

Fill(x, 100);

std::cout << x << std::endl;

最佳答案

那是调用未定义的行为。未定义的行为意味着任何事情都可能发生,包括让它看起来有效。临时 unique_ptr 实际上正在被破坏,结果释放了 100 个元素的 char 数组。您正在读取和写入不再分配给您的内存位置。

碰巧 x 指向的内存在您使用它时尚未分配或读取/写入其他内容。但是该内存已被临时 unique_ptr 释放,因此您不应该乱用它。

只是不要这样做。如果您想保留数组而不是 unique_ptr,请改用 release()

关于c++ - 语句结束时暂时不会被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7266207/

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