More Effective C++这本书1996年写的,这部分的“技术”,是从1996年的视角写的一些遍程技巧,以当前的视角来看,都太普通了。像条款28中说的智能指针,已经是C++标准的一部分了,如果比较了解的人,无需读这些条款。学习C++的一些新的性能更有意义。
条款25:将constructor和non-member functions虚化
使用一些技巧,让构造和非成员函数展现出虚函数的效果。感觉这些技术会自然的想到。
参考书本,写了个operator <<的虚化实现
class A{
virtual ostream& print(ostream& s) const=0;
};
class B:public A{
virtual ostream& print(ostream& s) const;
};
inline ostream* operator<<(ostream& s, const A& c){
return c.print(s);
}
条款26:限制某个class所能产生的对象数量
如果只能产生一个对象的化,就是单例模式。具体细节(构造函数私有,禁止继承等)不说了,只是作者推荐懒汉模式,我反而觉得饿汉好,因为人都很懒,我看到很多人写的懒汉单例都不是线程安全的。既然全局只有一个对象,消耗资源有限,使用更安全的模式何乐而不为呢!
条款27:要求或禁止对象产生于heap中
要求产生于heap:把析构设为private或者protect(构造设为private比骄麻烦,还要考虑拷贝构造、赋值构造等因素),写一个destroy函数自杀。这样该类对象只能通过new创建,并禁止delete,只能手动调用destroy函数释放资源。
禁止产生于heap:将operator new、operator delete、operator new[]、operator delete[]声明成private。但是如果该类被继承或者作为其他类的成员变量,则前面的办法无法禁止。
条款28:Smart Pointers(智能指针)
条款29:Reference counting(引用计数)
上面2款是没必要看的,因为还停留在auto_ptr阶段,引用计数就是讨论shared_ptr。有兴趣可以看看。
条款30:Proxy classes(替身类,代理类)
Proxy是一种设计模式,GOF1995年就出版的设计模式就有详细解释Proxy模式。
条款31:让函数根据一个以上的对象类型来决定如何虚化
看了一遍,恕我笨,不知道这个能干啥。