关于Pimpl技术

一般情况下,在设计类时,初学者总是把私有成员变量和函数设成值类型,这样做有三点不妥:

1、增加了编译时间。若“私有成员变量”或“私有成员函数的参数”都是值定义的,那么在编译这个类时需要这些对象的完全定义。而如果这些类型的头文件里又包含了很多其他类(尤其对一个大的项目更是如此),那么编译时间将会相当长;

 

2、使名字查找和匹配产生多义性。在C++中,可视性(visibility)和可访问性(accessibility)是不同的。这主要体现在名字匹配过程中。public、protected和private限制的是可访问性,但不是可视性。事实上在C++中没有什么关键字是指定可视性的,这就是说在编译时所有的代码其实都可以“看见”类中的内容。下面这个例子会更清楚一些:

int Twice(int);// 1 class Calc{ public: string Twice(string);// 2 private: char* Twice(char*);// 3 int Test(){ // Error!2和3不匹配,1又不在访问范围内 return Twice(21); } }; Calc c; // Error!因为相比于2,3是一个更好的匹配,所以编译器 // 会调用3.但此时3又是私有的。 c.Twice("Hello!"); 

从上面这个例子可以看出,编译器总是先进行名字匹配,此时是忽略可访问性限制的。为了解决这两个问题,我们只能使用::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

你可能感兴趣的:(c,String,Class,编译器,Standards)