在boost::shared_ptr
之前,从函数返回堆分配的指针是否被认为是不好的做法,因为将要求调用者记住对对象进行free()
?
还是被认为是“正常”的?
最佳答案
我认为这不是一个坏习惯,只要您的API还提供了等效的XXX_free
(或XXX_close
,XXX_clearup
或其他任何函数),客户端代码在使用指针结束时便可以调用。
这样一来,您就拥有了一个一致,对称的API,从某种意义上说,将堆对象生命周期的责任保持在一个地方。
这种方法也适用于更复杂的资源释放。例如,如果返回的指针指向动态分配的结构,该结构又具有指向动态分配的内存的成员,则可以从客户端代码中隐藏/抽象整个清理过程。