Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 50776
  • 排名 - 433

最新评论

阅读排行榜

评论排行榜

[原创文章欢迎转载,但请保留作者信息]
Justin 于 2009-12-15

到了Item18,就进入了第四章:Designs and Declarations (其实应该再加上“of Interfaces”)。看到标题我猜想接下来应该都是些大话了吧@#¥%

因为接口(interface)在C++中泛滥成灾,Scott认为应该认真设计这些接口,使得它们:很易用对,很难用错。
用错的可能有:

  • 调用接口时输入了错误的参数。书中有给出例子(一个接受年、月、日为参数的接口函数,用户可以轻易给出各种错误的输入),以及解决办法:用对象来约束参数输入的范围(不接受简单的整数作为输入,而是Date、Mon、Year对象)
  • 用常规的用法调用“特别”设计的接口。所以需要尽可能的把自己的设计往常规上靠:数据对象的行为要尽可能符合内建对象(比如int)的行为;接口的名字和意义要尽可能一致(比如STL中的容器基本都有一个叫做size的返回容器大小的接口)……这样做鼓励用户去正确的看待和使用你的接口。
  • 忘了处理调用接口后的遗留问题。因此不要让用户去“记得”做一些事情。比如说设计一个接口返回一个指向某新建对象的指针,这样做的结果就是该接口的用户需要“记得”去释放这个指针所指的对象:如果用户忘了释放或释放了好几次,后果就是@#¥%
    解决的办法之一是让该接口返回一个智能指针(嗯……印象模糊了?去看Item14),这样用户用完了就可以“忘记”这个指针:它自己会处理后事。
  • 所谓的“跨DLL问题”(cross DLL problem):在一个DLL中new一个对象,然后对象被传到另外一个DLL里被delete。大师推荐用shared_ptr因为它解决了这个问题。

以上问题的解决也是有代价的:额外对象的创建和销毁需要时间空间。比如boost的shared_ptr就是普通指针的两倍大小,还有额外的对象操作时间+过程动态内存分配等。应了那句老话:有所得必有所失。实际上有些底层代码根本没这个资本提供这样的“豪华装备”,不过有这样的思想还是很重要D……

posted on 2009-12-31 07:55 Justin.H 阅读(2226) 评论(3)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

Feedback

# re: Effective C++ 炒冷饭 - Item18 约束接口的使用[未登录] 2009-12-31 13:31 xu
返回一个新建对象的指针,这...太多了,唉...  回复  更多评论
  

# re: Effective C++ 炒冷饭 - Item18 约束接口的使用 2009-12-31 17:53 Justin.H
# re: Effective C++ 炒冷饭 - Item18 约束接口的使用[未登录] 2009-12-31 13:31 xu
返回一个新建对象的指针,这...太多了,唉...

@xu 楼上的兄台什么太多了?为何感伤?
  回复  更多评论
  

# re: Effective C++ 炒冷饭 - Item18 约束接口的使用 2009-12-31 21:26 罗莱家纺官方网
以上问题的解决也是有代价的  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理