一般情况下,在设计类时,初学者总是把私有成员变量和函数设成值类型,这样做有三点不妥:
1、增加了编译时间。若“私有成员变量”或“私有成员函数的参数”都是值定义的,那么在编译这个类时需要这些对象的完全定义。而如果这些类型的头文件里又包含了很多其他类(尤其对一个大的项目更是如此),那么编译时间将会相当长;
2、使名字查找和匹配产生多义性。在C++中,可视性(visibility)和可访问性(accessibility)是不同的。这主要体现在名字匹配过程中。public、protected和private限制的是可访问性,但不是可视性。事实上在C++中没有什么关键字是指定可视性的,这就是说在编译时所有的代码其实都可以“看见”类中的内容。下面这个例子会更清楚一些:
从上面这个例子可以看出,编译器总是先进行名字匹配,此时是忽略可访问性限制的。为了解决这两个问题,我们只能使用::Twice(21)和
c.Twice(string("Hello!"))。
3、安全性
此处涉及到很复杂的线程机制,不予详细解释。
更多资料请参照http://www.gamedev.net/reference/articles/article1794.asp
http://www.cppblog.com/SpringSnow/articles/80111.html两篇博文。
————引自Sutter C++ Coding Standards