关于侯捷先生在《程序员》第五期的Loki::SmallObjAllocator讲解。
不好意思,现在才发这个贴,最近才有时间静下心来学习自己喜欢的东西。
正题:
我使用loki-0.1.6,按侯捷先生的Loki::SmallObjAllocator的用法进行了测试,
#include <loki\SmallObj.h>
int main()
{
Loki::SmallObjAllocator myAlloc(2048, 256);
void* p1 = (void*)myAlloc.Allocate(20);
void* p4 = (void*)myAlloc.Allocate(64);
void* p2 = (void*)myAlloc.Allocate(40);
void* p3 = (void*)myAlloc.Allocate(300);
myAlloc.Deallocate(p4, 64);
myAlloc.Deallocate(p1, 20);
myAlloc.Deallocate(p2, 40);
myAlloc.Deallocate(p3, 300);
return 0;
}
发现行不通,研究了下代码:
Loki::SmallObjAllocator声明于loki\SmallObj.h,
class LOKI_EXPORT SmallObjAllocator
{
protected:
SmallObjAllocator( std::size_t pageSize, std::size_t
maxObjectSize,
std::size_t objectAlignSize );
~SmallObjAllocator( void );
private:
/// Default-constructor is not implemented.
SmallObjAllocator( void );
/// Copy-constructor is not implemented.
SmallObjAllocator( const SmallObjAllocator & );
/// Copy-assignment operator is not implemented.
SmallObjAllocator & operator = ( const SmallObjAllocator & );
}
那么Loki::SmallObjAllocator到底是用来做什么的呢,只能被继承吗,无法产生实例,
[解决办法]
既然讲loki,那么,你《Modern C++ Design》这书的相关章节看了没有?
[解决办法]
老实说,用LOKI要小心,尤其是大项目,以前做项目的时候尝试用了一下他的Smart Pointer,隐藏了一个非常深的BUG,多线程的情况下,偶尔!!是偶尔!会出现一次非常操作,当时查得天昏地暗都查不到原因,直接换了boost::smart_ptr之后才解决了。
LOKI研究研究就好了,别拿来当真……
[解决办法]
是的,智能指针中能放心用的只有scoped_ptr
auto_ptr整个就是垃圾
shared_ptr如果到处都用,循环引用问题会痛死人。
所以,还是等c++09标准,用垃圾回收吧。