设为首页 加入收藏

TOP

C++ Primer 学习笔记_100_特殊工具与技术 --优化内存分配[续2](二)
2015-07-20 17:54:00 来源: 作者: 【 】 浏览:4
Tags:Primer 学习 笔记 _100_ 特殊 工具 技术 优化 内存 分配
tOajrCDU2s72ubm6r8r91tDS0b6tx+Wz/cHLttTP87G+ye2jrGRlbGV0ZSCx7bTvyr3U2rX308Mgb3BlcmF0b3IgZGVsZXRlINaux7C199PDzva5ubqvyv2ho29wZXJhdG9yIGRlbGV0ZSCzydSxuty88rWlo7o8L3A+PHByZSBjbGFzcz0="brush:java;">template void CachedObj ::operator delete(void *p,std::size_t) { if (p != 0) add_to_freelist(static_cast (p)); }

它调用 add_to_freelist 成员将被删除对象放回自由列表。

令人感兴趣的部分是强制类型转换。在删除动态分配的类类型对象时调用 operator delete,编译器将该对象的地址传给 operator delete。但是,指针的形参类型必须是 void*,在调用 add_to_freelist 之前,必须将指针从 void* 强制转换为它的实际类型,本例中,那个类型是指向 T 的指针,它是 CachedObj 派生类型的对象的指针。

6.add_to_freelist成员

这个成员的任务是设置next指针,并且在将对象加到自由列表时更新freeStore指针:

template 
  
   
void CachedObj
   
    ::add_to_freelist(T *p) { p -> CachedObj
    
     ::next = freeStore; freeStore = p; }
    
   
  

为了避免任何与派生类中定义的成员可能的冲突,显式指定我们正在给基类成员 next 赋值。

7.定义静态数据成员

template 
  
    std::allocator
   
     CachedObj
    
     ::alloc_mem; template 
     
       T *CachedObj
      
       ::freeStore = 0; template 
       
         const std::size_t CachedObj
        
         ::chunk = 24; 
        
       
      
     
    
   
  

照常,对于类模板的静态成员,每个类型使用不同的静态成员来实例化 CachedObj 类。将 chunk 初始化为任意值,本例中为 24。将 freeStore 指针初始化为 0,指出自由列表开始时为空。alloc_mem 成员不需要初始化,但必须记得定义它。


//P646 习题18.10 源代码修改之后
class iStack
{
public:
    iStack(int capacity):stack(capacity),top(0) {}
    iStack():top(0) {}

private:
    vector
  
    stack;
    int top;
};

int main()
{
    iStack *ps = new iStack(20);
    const iStack *ps2 = new const iStack(15);
    iStack *ps3 = new iStack[100];
} 
  


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 3879 hdu 3917 构造最大权闭.. 下一篇leetcode 之 Recover Binary Sear..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: