加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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 :: make_shared

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读