4.SmallObject
小对象分配策略在SmallObjAllocator层已经柳暗花明,可以猜测SmallObject是个顶级包装,使得使用更方便,确实是这样的,“SmallObject的定义 非常简单,只不过情节有点复杂”。









需要注意的一点是delete的类级别重载:
class Base
...{
public:
static void operator delete(void* p,std::size_t size)
...{
cout<<"you call my delete"<<endl;
::operator delete(p);
}
};
int _tmain(int argc, _TCHAR* argv[])
...{
Base* haha = new Base;
delete haha;
return 0;
}
如你所见,delete haha得时候,我们定义的delete得到了调用,也就是编译器提供给了我们额外的一个参数size,这也是Andrei要讨论编译期获取size的策略的原因,编译器给我们传了额外参数,我们有必要了解一下编译器开发者怎么做的。但注意,只是了解,我觉得在这里明白类operator delete以及定义类类虚析构函数的重要性就可以了。
对于整个程序里的SmallObject而言,我们只需要一个SmallObjAllocator,这就是Singleton模式了,可以抢先欣赏一下Loki得SingletonHolder:










