gpt4 book ai didi

c++ - 从方法返回后局部结构变量不会被销毁

转载 作者:行者123 更新时间:2023-11-30 00:53:11 25 4
gpt4 key购买 nike

我有以下代码

#include <iostream>

struct mystruct
{
float x;
};

void fun(mystruct* ptr)
{
mystruct str = {10};
ptr = &str;
std::cout<<"bbq";
}

class cls
{
public:
mystruct* ptr;
void fun()
{
mystruct str = {10};
ptr = &str;
std::cout<<"bbq";
}
};

int main()
{
mystruct* ptr = new mystruct;
fun(ptr);
std::cout<<"bbq";

cls obj;
obj.fun();
std::cout<<"bbq";

}

首先指针 ptr 在函数 fun 中设置为局部结构的地址。当函数返回时,局部结构按预期被销毁。

但是在类中有一个方法对成员指针做同样的事情,但是在方法返回并且我回到主成员指针之后仍然设置。方法返回后方法局部变量不会被销毁吗?

最佳答案

您的第一个示例不是设置传递的指针,而是设置指针的本地拷贝,因为它是按值传递的。您需要通过引用传递才能使用实际参数:

void fun(mystruct*& ptr);

局部变量函数返回后销毁。但是,即使您在指针中看到一个设置为局部变量的值,您也不能假设该局部变量没有被销毁。如果您在将指针分配给过期对象后随时取消引用该指针,您的程序就会出现未定义行为。

相关:Can a local variable's memory be accessed outside its scope?

关于c++ - 从方法返回后局部结构变量不会被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136931/

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