从函数返回堆分配指针是不礼貌的吗?

bob*_*obo 1 c c++ pointers heap-memory

之前boost::shared_ptr,从函数返回堆分配指针被认为是一种不好的做法,因为调用者需要记住free()该对象吗?

或者,它被认为是"正常"?

Oli*_*rth 11

我不认为这是不好的做法,只要你的API还提供等效XXX_free(或XXX_close,XXX_clearup或其他)功能,当使用指针完成的客户端代码可以调用.

这样,就可以在一个地方维护堆对象生命周期的责任,从而拥有一致的对称API.

这种方法也适用于更复杂的资源释放.例如,如果返回的指针是动态分配的结构,而该结构又具有指向动态分配的内存的成员,则可以从客户端代码隐藏/抽象整个清理过程.

  • @丹尼尔:当然.但是OP标记了问题"C",所以我给出了一个C答案! (4认同)