`
kuwoleft
  • 浏览: 1074987 次
文章分类
社区版块
存档分类
最新评论

让接口容易被正确使用,不易被误用——effective c++学习笔记

 
阅读更多

让接口容易被正确使用,不易被误用(Make interface easy to use correctly and hard to use incorrectly.

如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不应该通过编译;如果代码通过了编译,它的作为就是客户想要的。

这一条准则非常重要,就像我自己定义的一个垃圾回收机制,它有两个前提:

<!--[if !supportLists]-->1、 <!--[endif]-->返回的对象的reference不允许进行delete操作。这个我是通过将析构函数设定为private函数来实现的。

<!--[if !supportLists]-->2、 <!--[endif]-->函数返回后,这个reference不允许再被使用。这个目前没有限定。这个通过什么来限定?这里可以考虑使用智能指针。

许多客户端的错误可以因为引入新的类型而获得预防。

示例:

class Date

{

public :

Date(int month, int day, int year);

};

这个接口有一个问题,用户调用构造函数是可能会传入错误的参数,比如:Date(30, 3, 1982);,应该是330

注:c++中构造函数失败的通知方式有两种:一是通过异常,一是通过状态位。

可以定义一个结构体:

struct Day

{

explicit Day(int d)

: val(d){}

int val;

};

进一步,month要能够反映一年有12个月这个事实。

class Month

{

public :

static Month Jan(){return Month(1);}

private:

explicit Month (int m);//防止通过其他途径生成Month

};

这样,Date可以这样调用:

Date(Month::Jan(), );

预防客户错误的另一个方法是,限制类型内什么事可做,什么事不能做。常见的是加const

“另types容易被使用,不易被误用的表现形式”:除非有好理由,否则应该尽量令你的types的行为与内置的types一致。

一致性的接口更容易导致接口容易被使用。

任何接口如果要求客户必须记得做某些事情,就是有这不正确使用的倾向。

比如,如果一个接口返回一个资源,而要求这个资源必须被客户释放,则可能发生两个错误:未释放和多重释放。

可以使用智能指针消除资源泄漏的问题。

另外,tr1::shared_ptr有一个特性,就是他可以指定这个资源指针的删除器。这样就可以避免另外一个问题:“cross-DLL problem ”,这个问题发生于对象在动态链接库中被new,而在另外一个DLL种被delete,这在很多平台上会导致运行期错误。

注意:

<!--[if !supportLists]-->1、 <!--[endif]-->好的接口很容易被正确使用,不容易被误用。你应该在所有的接口中努力达成这些性质。

<!--[if !supportLists]-->2、 <!--[endif]-->“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。

<!--[if !supportLists]-->3、 <!--[endif]-->阻止误用的办法包括建立新类型,限制类型上的动作,束缚对象值,以及消除客户对资源的管理责任。

<!--[if !supportLists]-->4、 <!--[endif]-->tr1::shared_ptr支持定制型删除器,这可防范DLL问题。可被用来自动解除互斥锁。

分享到:
评论

相关推荐

    Effective C++ 中文版

    条款18:让接口容易被正确使用,不易被误用 条款19:设计class犹如设计type 条款20:宁以pass-by-reference-to-const替换Pass-by-value 条款21:必须返回对象时,别妄想返回其reference 条款22: 将成员变量声明...

    标点符号误用——廖美英.ppt

    标点符号误用——廖美英.ppt

    高考成语误用——褒贬误用经典例题

    复习备考 ★高考成语误用——褒贬误用★ “褒贬误用”是高考考查成语误用类型中一种常见的情况。成语从感情色彩的角度看,可分为三类:第一类是具有褒奖、赞扬色彩,用于正面、积极的人或物,如“危言危行”“凤毛

    Effective C++(第三版)

    条款18:让接口容易被正确使用,不易被误用 make interfaces easy to use correctly and hard to use incorrectly. 条款19:设计class犹如设计type treat class design as type design. 条款20:宁以pass-by-...

    More Effective C++

    本书告诉你如何更具实效地设计并实作C++ 软体:让它行为更正确;面对异常情况时更稳健强固;更有效率;更具移植性;将语言特性发挥得更好;更优雅地调整适应;在「混合语言」开发环境中运作更好;更容易被正确运用;...

    容易被误用或混淆的会计和金融词汇参考.pdf

    容易被误用或混淆的会计和金融词汇参考.pdf

    基于深度学习的API误用缺陷检测.pdf

    基于深度学习的API误用缺陷检测.pdf

    基于机器学习的密码学误用的检测.pdf

    基于机器学习的密码学误用的检测.pdf

    程序员在运用C++语言写代码的时候需要注意的五个方面.docx

    2.对指针的正确使用 - 在C ++中,指针是一种非常强大的工具,但也很容易出错。误用指针可能会导致程序崩溃或安全漏洞。确保对指针的正确使用,包括避免野指针,避免指针算术等。 3.对数组的正确使用 - 数组是一种...

    EffectiveCPlusPlus

    让接口容易被正确使用,不易被误用 设计类犹如设计类型 宁以按引用传递值替换按值传递 必须返回对象时,别妄想返回其参考 将成员变量声明为private 宁以非会员,非朋友替换会员函数 若所有参数皆需类型转换,请逐步...

    高质量C/C++编程指南

    这是上海贝尔实验室的林锐博士写的一个关于高质量编程的文档,里面的很多东西我们经常会误用,通过本文档的学习,可以让我们更深入的了解C/C++

    编写高质量代码之C#、C++_nodrm.azw3

    《编写高质量代码:改善c++程序的150个建议》在逻辑上一共分为三个部分:语法部分涵盖c++从c语言继承而来的一些极为重要但又极容易被误解和误用的一些语法特性,从c语言到c++的改变,以及内存管理、类、模板、异常...

    C++指针应用的四大误区

    C++语言中,指针应用的误区可以分为操作空指针、内存泄露、重复释放、误用常量指针和常量指针四个方面。本文给出了可能的错误场景,并给出解决方法。

    Redis数据库的使用场景介绍(避免误用Redis)

    主要介绍了Redis数据库的使用场景介绍(避免误用Redis),本文用简要的语言总结了Redis数据库的适应场合,人而避免错误的使用它而产生昂贵的维护代价,需要的朋友可以参考下

    汽车悬架误用工况下前下摆臂屈曲分析与优化.pdf

    汽车悬架误用工况下前下摆臂屈曲分析与优化.pdf

    亚胺及亚氨基名词的误用

    亚胺及亚氨基名词的误用,蒋晓晖,,仲胺由于分子结构式中含有一个亚氨基HN&lt;片段,经常被混淆为某亚胺;虽是含C=N双键的亚胺化合物,但双键碳C部分作为该氮原子上的亚�

    王强 入侵检测系统中误用检测技术的研究[060514]

    王强 入侵检测系统中误用检测技术的研究[060514]

    HTML标记语言——引用

    “Misquotations are the only quotations tha are never misquoted” (只有错误的引用永远不会被误用) – Hesketh Pearson 所有类型的网站都经常会使用引用,不管是引用其他网页、作者或出版物的内容,以标准方法...

    奇安信威胁情报平台-API使用说明.pdf

    奇安信威胁情报平台-API使用说明,接口使用说明文档

Global site tag (gtag.js) - Google Analytics