先考虑下面这个接口:
1 class Data{ 2 ... 3 public: 4 Data(int month, int day, int year); 5 };
虽然声明是比较合理的,但是有时候人们不一定会这样做,例如做下面这样调用对于客户来说也是完全可能的:
Data(2, 30, 1995);
可能只是手误打错了30和20,但是接口额使用者并不能很好的观察的这一点,看看下面对这个接口的重新设计:
struct Month{ Month(int mon):val(mon){} int val }; struct Day{ Month(int day):val(day){} int val }; struct Year{ Month(int year):val(year){} int val }; 接口就会设计成这样: Data(Month , Day, Year); 那么调用的时候可能就需要这样去调用: Data(Month(month), Day(day), Year(year));
1 Investment * createInvestment(); 2 //使用原始指针可能会使得用户饭错误的概率大大增加,这里尝试使用一个智能指针来返回更好! 3 shared_ptr<Investment> createInvestment() 4 { 5 ... 6 return shared_ptr<Investment>(new Investment(tmpIvst)); 7 }
原文:http://www.cnblogs.com/-wang-cheng/p/4857622.html