Rob*_*cks 3 c++ syntax garbage-collection pointers visual-c++
我在函数中定义了一个对象:
SoundFXSystem* Engine::GetSystem(){
SoundFXSystem system; // var defined inside a function
sEngine->GetSystem(&system);
return &system; // can I return the address of the var?
}
Run Code Online (Sandbox Code Playgroud)
返回var的地址并在以后的程序中使用它是否合法?当函数退出并且调用者无法使用时,它是否会立即超出范围?
编辑:如果我按如下方式定义对象,它会被动态分配吗?
SoundFXSystem* Engine::GetSystem(){
SoundFXSystem* system = new SoundFXSystem(); // var defined inside a function
sEngine->GetSystem(&system);
return system;
}
Run Code Online (Sandbox Code Playgroud)
是的,该对象在函数的作用域中定义,因此当函数的作用域结束时,它超出了作用域.你需要:
通过值返回它,或者
动态分配,即使用new或std::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
}
Run Code Online (Sandbox Code Playgroud)