编程习惯:提供内存分配的成对原则

  读《windows核心编程 4ed》(Jeffrey Richter 著 黄陇、李虎 译)后的笔记
开发人员可能会犯这么一个错误:提供申请内存空间的函数,却没有提供对应的释放空间的函数,而是寄希望于用户(程序员)通过标准释放方式来解决问题。

如以下代码:
  1. VOID EXEFunc()
  2. {
  3.     PVOID pv = DLLFunc();
  4.     free(pv);
  5. }
  6. PVOID DLLFunc()
  7. {
  8.     return (malloc(100));
  9. }

在一般情况下,这么做(调用free)不会有什么问题,但这不绝对:
1、正如书中所言(P487),如果EXEFunc()和DLLFunc()两者或其中之一链接到静态版本的C/C++运行时库,
则对free的调用就会失败。
2、补充:不该对DLLFunc的实现做假设!假如它的实现调用的不是malloc而是new,或者自定义的内存池呢?
接口和实现的分离原则确保了接口的稳定性,但实现却可以变化。

基于以上原因,正确的设计是同时编写一个DLLFreeFunc函数:
  1. BOOL DLLFreeFunc(PVOID pv)
  2. {
  3.     return ( free(pv) );
  4. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值