我有一个函数,如果它没有提供第二个参数,默认情况下实例化一个指针.
void doSomething(int a, Obj* obj = new Obj()) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果我想释放obj,我是否需要在函数内调用显式删除?如果我已经从默认参数值实例化指针,它是否自动完成?
我想避免自己做一个显式删除,因为如果传递第二个参数,那么我不想删除调用者传递的指针.
听起来你的内存所有权语义需要返工.在某些情况下,你拥有记忆而你拥有的则没有.如果你坚持默认创建一个实例Obj
,那么也接受一个指示你是否拥有内存的布尔值.但最后,我实际上建议你使用重载来实现这一点,其中一个函数接受一个参数而另外两个参数.只接受一个的那个将创建一个实例,Obj
然后调用你的基本doSomething
函数.
就像是:
void doSomething(int a, Obj* obj) {
...
}
void doSomething(int a) {
Obj tmp;
doSomething(a, &tmp);
}
Run Code Online (Sandbox Code Playgroud)