C函数内定义的对象在超出范围后是否会被销毁?
发布时间:2020-12-16 10:33:06 所属栏目:百科 来源:网络整理
导读:我在函数中定义了一个对象: 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; // 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; } 解决方法
是的,该对象在函数的作用域中定义,因此当函数的作用域结束时,它超出了作用域.你需要:
>按值返回,或者 如果使用new分配它,请确保有人知道以后删除它.这就是为什么它首选返回std :: unique_ptr而不是分配函数的原始指针 – 它避免了可能的内存泄漏. 要按值返回,您可以按如下方式更改函数: SoundFXSystem Engine::GetSystem(){ SoundFXSystem system; // var defined inside a function sEngine->GetSystem(&system); return system; //return var by value } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |