我具有一个函数,如果未与第二个参数一起提供默认情况下的指针。
void doSomething(int a, Obj* obj = new Obj()) {
...
}
如果要发布OBJ,我是否需要在功能中调用明确删除,或者如果我从默认参数值实例化指针时会自动完成?
?我想避免自行删除明确的删除,因为如果通过第二个参数,我不想删除呼叫者传递的指针。
听起来您的内存所有权语义需要返工。在某些情况下,您拥有记忆和其他人。如果您坚持默认创建Obj
的实例,则还接受一个布尔值,该布尔值指示您是否拥有内存。最终,我实际上建议您使用过载来完成此操作,其中一个函数需要一个参数,另一个函数为另一个函数。只接受一个人的一个将创建Obj
的实例,然后调用您的基本doSomething
函数。
类似:
void doSomething(int a, Obj* obj) {
...
}
void doSomething(int a) {
Obj tmp;
doSomething(a, &tmp);
}