gpt4 book ai didi

c++ - 在 C++ 函数中定义的对象在超出范围后是否会被销毁?

转载 作者:太空狗 更新时间:2023-10-29 19:44:04 26 4
gpt4 key购买 nike

我在函数中定义了一个对象:

SoundFXSystem* Engine::GetSystem(){
SoundFXSystem system; // var defined inside a function
sEngine->GetSystem(&system);
return &system; // can I return the address of the var?
}

返回 var 的地址并在以后的程序中使用它是否合法?它会在函数退出时立即超出作用域并且无法供调用者使用吗?

编辑:如果我这样定义对象,它会被动态分配吗?

SoundFXSystem* Engine::GetSystem(){
SoundFXSystem* system = new SoundFXSystem(); // var defined inside a function
sEngine->GetSystem(&system);
return system;
}

最佳答案

是的,对象是在函数的作用域中定义的,所以当函数的作用域结束时它就超出了作用域。您需要:

  1. 改为按值返回它,或者

  2. 动态分配它,即使用 newstd::make_shared

如果您使用new 分配它,请确保稍后有人会知道delete 它。这就是为什么首选返回 std::unique_ptr 而不是分配函数的原始指针 - 它避免了可能的内存泄漏。

要改为按值返回,您需要按如下方式更改函数:

SoundFXSystem Engine::GetSystem(){
SoundFXSystem system; // var defined inside a function
sEngine->GetSystem(&system);
return system; //return var by value
}

关于c++ - 在 C++ 函数中定义的对象在超出范围后是否会被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15586770/

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