功能尚不完全, 存在缺陷。定义Vector vec(10, 10)会报出异常, 原因是无法识别10是int型还是iterator型。注意几点:分配内存不要使用new和delete,因为new的同时就把对象构造了,而我们需要的是原始内存。所以应该使用标准库提供的allocator类来实现内存的控制。当...
分类:
其他好文 时间:
2014-10-05 20:04:49
阅读次数:
194
我们只需改动allocate和deallocate,来实现自己的内存分配策略即可。代码如下: 1 #ifndef ALLOCATOR_H 2 #define ALLOCATOR_H 3 4 #include 5 #include 6 7 template 8 class Allocato...
分类:
其他好文 时间:
2014-10-05 19:47:38
阅读次数:
236
前面我们使用了uninitialized_fill,来批量初始化某一段内存。 下面提供三个函数的实现代码,这三个代码的共同点是: 1.遇到错误,抛出异常 2.出现异常时,把之前构造的对象全部销毁 所以,这三个函数要么成功,要么无任何副作用。使用异常来通知使用者,所以在catch块中,处理完异常后要将...
分类:
其他好文 时间:
2014-10-03 02:33:33
阅读次数:
324
自己实现Allocator并不难,其实只需要改变allocate和deallocate,来实现自己的内存分配策略。 下面是一个std::allocator的模拟实现 #ifndef ALLOCATOR_HPP
#define ALLOCATOR_HPP #include #include templ...
分类:
其他好文 时间:
2014-10-02 20:34:33
阅读次数:
264
上一篇我们提到了new运算符以及它的工作步骤,其实无非是把两项工作独立出来: 1.申请原始内存 2.执行构造函数 delete也涉及了两个工作: 1.执行析构函数 2.释放原始内存 其实标准库提供了另外一种更加高级的手段实现内存的分配和构造,就是std::allocator的职责。 allocato...
分类:
其他好文 时间:
2014-10-02 18:50:23
阅读次数:
195
注意几点:
分配内存不要使用new和delete,因为new的同时就把对象构造了,而我们需要的是原始内存。
所以应该使用标准库提供的allocator类来实现内存的控制。当然也可以重载operator new操作符,因为二者都是使用malloc作为底层实现,所以直接采用malloc也可以。
对象的复制必须使用系统提供的uninitialized_fill和uninitialized_...
分类:
编程语言 时间:
2014-10-02 18:37:43
阅读次数:
231
注意几点: 分配内存不要使用new和delete,因为new的同时就把对象构造了,而我们需要的是原始内存。 所以应该使用标准库提供的allocator类来实现内存的控制。当然也可以重载operator new操作符,因为二者都是使用malloc作为底层实现,所以直接采用malloc也可以。 对象的复...
分类:
其他好文 时间:
2014-09-29 00:11:26
阅读次数:
303
首先,关于allocator戳旁边→维基百科-分配器(C++)这次我只用了其中的一部分API,来实现一个简易的vector容器,这个简易版vector实现了插入、删除、查找等简易功能,由于对右值的理解不足,所以这次并未实现关于右值的API。【MSDN-class allocator_base API...
分类:
其他好文 时间:
2014-09-24 00:27:55
阅读次数:
284
引言 在C++中,POD是一个极其重要的概念。要理解POD类型,我们首先需要理解Aggregate类型。下文根据stackoverflow上的回答将对Aggregate类型做一个全面的解读。 对于Aggragates的定义 C++标准(C++ 03 8.5.1 §1)中的正式定义如下: An agg...
分类:
其他好文 时间:
2014-09-18 22:03:24
阅读次数:
219
第二章:空间配置器 allocator SGI特殊的空间配置器,std::alloc SGI是以malloc()和free()完成内存的配置与释放。 SGI设计了双层级配置器: 第一级配置器直接使用malloc()和free(); _malloc_alloc_template ...
分类:
其他好文 时间:
2014-09-02 22:40:25
阅读次数:
237