摘要:
设计class 的时候,需要好好考虑下面的问题:1、新type的对象应该如何被创建和销毁?2、对象的初始化和对象的赋值该有什么样的差别?3、新type的对象如果pass by value,意味着什么?4、什么是新type的合法值?5、新type需要某个继承体系吗?6、新type需要什么样的转换?7、什么样的操作符和函数对新type的对象是合理的?8、该如何访问新type对象的成员?9、什么是新type未声明的接口?10、新type有多么一般化?是否应该使用template? 阅读全文
posted @ 2014-01-20 21:29
Andy Niu
阅读(170)
评论(0)
推荐(0)
摘要:
1、所谓软件设计,就是“让软件做出你期望它做的事情”的步骤。首先是构想,考虑对外暴露的接口,然后实现。2、客户没有正确使用自己提供的接口,自己也要负担一部分责任,思考自己的接口是不是简单明了,容易理解。3、对于多个形参的接口,最好表明每个形参的类型和有效范围。4、尽量限制哪些事能做,哪些事不能做,尽早暴露错误。如果没有好的理由,与内置类型保持一致。5、减少用户出错的可能性,考虑,在堆上获取的资源,期望用户使用资源管理类对它封装,但是用户可能忘记。那么,我就对资源封装,并返回给用户一个资源管理对象。对于引用次数为0,执行其它操作的资源管理类,应该在内部指定删除器。 阅读全文
posted @ 2014-01-20 21:24
Andy Niu
阅读(319)
评论(0)
推荐(0)
摘要:
1、copy构造和copy赋值,我们称为copy方法。当我们声明自己的copy方法时,就意味着,告诉编译器,我自己定义copy构造和copy赋值,不要你自动生成。这种情况下,自己要保证复制对象的时候,不要忘记每一个成分。2、开始定义一个类的时候,在copy构造我们会初始化每一个字段,在copy赋值我们会为每个字段赋值,不会出错。后来,当我们在类中增加一个字段,很可能会忘记初始化这个字段,或者为它赋值。这种情况,要特别注意。3、当出现继承的时候,存在潜在的问题。子类会继承父类的字段,即使是private字段也继承下来,只不过不能访问。这种情况下,不要忘记父类中的字段。4、copy构造的时候,在初 阅读全文
posted @ 2014-01-20 21:02
Andy Niu
阅读(273)
评论(0)
推荐(0)
摘要:
1、自我赋值,看起来愚蠢,但是却合法。有些自我赋值一眼就可看出来。有些自我赋值是潜在的。比如:a[i] = a[j]; *px = *py; 甚至不同类型的指针,都指向同一个地址,也是自我赋值,这一类自我赋值,很难识别,因此对自我赋值要有一定的防范。2、对于资源管理类auto_ptr和shared_ptr,自我赋值是安全的。如果自行管理资源,比如Widget中有个Bitmap* pb;copy赋值如下:1 Widget& Widget::operator=(const Widget& rhs)2 {3 delete pb;4 pb = new Bitmap(*(rhs.pb)) 阅读全文
posted @ 2014-01-20 20:35
Andy Niu
阅读(1252)
评论(0)
推荐(0)
摘要:
1、swap交换对象值,std提供了实现方法模版的实现,它的实现是交换对象值。 1 namespace std 2 { 3 template 4 void swap(T& a,T& b) 5 { 6 T temp(a); 7 a = b; 8 b = a; 9 }10 }2、考虑下面的情况下,资源管理类Widget,内部只有一个指针WidgetImpl,该指针指向一个对象,这个对象中包含真正数据。对这种资源管理类执行swap,如果调用std中的swap,有哪些动作?对于Widget,copy构造一次,copy赋值两次,同时对于WidgetImpl,copy构造一次,cop... 阅读全文
posted @ 2014-01-20 19:56
Andy Niu
阅读(635)
评论(0)
推荐(0)
浙公网安备 33010602011771号