迈克老狼

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 

我们知道,c++中分配对象和删除对象常用new,和delete操作,那它们的到底怎样工作的呢?

比如,我们创建一个string对象sp

    string * sp = new string("initialized");

 

首先,表达式会调用标准库中函数operator new 分配足够的未类型化的raw内存,接着,调用placement new操作构建对象,最后返回指向构建对象的指针。

delete sp; 时候,会先调用sp的析构函数,释放对象,最后会调用operator delete释放内存。

 

下面是operator newoperator delete的函数定义:

     void *operator new(size_t);       // allocate an object
     void *operator new[](size_t);     // allocate an array
     void *operator delete(void*);     // free an object
     void *operator delete[](void*);   // free an array
 

定位new表示在式在已分配的内存中构造对象,它类似于allocator类中的construct。它的语法如下:

     new (place_address) type
     
new (place_address) type (initializer-list)
     
new (first_free) T(t);
type (initializer-list)其实就是类型的一个构造函数。
下面是采用operator new, operator delete以及定位new实现的myVector代码:
Code
posted on 2009-11-18 13:53  迈克老狼  阅读(272)  评论(0编辑  收藏  举报