首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于侯捷先生在《程序员》第五期的Loki:SmallObjAllocator讲解。该如何处理

2012-03-09 
关于侯捷先生在《程序员》第五期的Loki::SmallObjAllocator讲解。不好意思,现在才发这个贴,最近才有时间静下

关于侯捷先生在《程序员》第五期的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标准,用垃圾回收吧。

热点排行