gpt4 book ai didi

c++ - 在 C++ 中,返回从本地 char 数组创建的字符串会导致内存泄漏或未定义的行为吗?

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

我想知道这是否会导致 C++ 中的内存泄漏或未定义的结果?

string foo()
{
char tempArray[30];
strcpy(tempArray, "This is a test");
return string(tempArray);
}

我知道这在 C 中是一件坏事,但我还没有找到 C++ 的明确答案。

所以每个人都在说不,但我仍然对何时释放内存感到困惑?

假设我有调用上述方法的方法

void bar()
{
string testString = foo();
}

在上面的代码中,从 foo() 返回的字符串对象在什么时候调用了它的析构函数?是在复制到对象 testString 后立即执行的吗?

最佳答案

在你的例子中发生的是带有签名的构造函数

字符串 (const char * s);

被调用。构造函数为字符串的拷贝分配新内存并将其复制到新内存中。然后,字符串对象负责在调用其析构函数时释放自己的内存。

当你复制一个字符串时,copy constructor还分配内存并制作拷贝。

您还应该看看 RAII图案。这就是 string 的内存管理工作原理。

关于c++ - 在 C++ 中,返回从本地 char 数组创建的字符串会导致内存泄漏或未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13425222/

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