allocator类
来源:互联网 发布:mac官网海淘 编辑:程序博客网 时间:2024/06/05 19:01
new有一些灵活性的局限,其中一方面表现在它将内存分配和对象构造组合在了一起。类似的,delete将对象析构和内存释放组合在了一起。我们分配单个对象时,通常希望将内存分配和对象初始化组合在一起。因为在这种情况下,我们几乎肯定知道对象应有什么值。
当分配一大块内存时,我们通常计划在这块内存上按需构造对象。在此情况下,我们希望将内存分配和对象构造分离。这意味着我们可以分配大块内存,但只在真正需要时才真正执行对象创建操作(同时付出一定开销)。
一般情况下,将内存分配和对象构造组合在一起可能会导致不必要的浪费,例如:
string* const p = new string[n]; // 构造n个空stringstring s;string* q = p;while (cin >> s && q != p + n) *q++ = s;const size_t size = q - p; // 记住读取了多少个stringdelete [] p; // p指向一个数组;记得用delete[]来释放
new表达式分配并初始化了n个string。但是,我们可能不需要n个string,少量string可能就足够了。这样,我们就可能创建了一些永远也用不到的对象。而且,对于那些确实要使用的对象,我们也在初始化之后立即赋予了它们新值。每个使用到的元素都被赋值了两次:第一次是在默认初始化时,随后是在赋值时。
更重要的是,那些没有默认构造函数的类就不能动态分配数组了。
allocator类
allocator类提供一种类型感知的内存分配方法,它分配的内存是原始的、未构造的。allocator是一个模板,为了定义一个allocator对象,我们必须指明这个allocator可以分配的对象类型。当一个allocator对象分配内存时,它会根据给定的对象类型来确定恰当的内存大小和对齐位置:
allocator<string> alloc; // 可以分配string的allocator对象auto const p = alloc.allocate(n); // 分配n个未初始化的string
allocator分配未构造的内存
allocator分配的内存是未构造的(unconstructed)。我们按需在此内存中构造对象。在新标准库中,construct成员函数接受一个指针和零个或多个额外参数,在给定位置构造一个元素。额外参数用来初始化构造的对象。
另外需要注意的是:在还未构造对象的情况下使用原始内存是错误的。
当我们用完对象后,必须对每个构造的元素调用destroy来销毁它们。函数destroy接受一个指针,对指向的对象执行析构函数。
我们只能对真正构造的元素进行destroy操作。
- allocator类
- allocator类
- allocator类
- allocator类
- allocator类
- allocator类
- 练习Allocator类
- STL中allocator类
- allocator 类的使用
- STL allocator 类探究
- allocator
- allocator
- allocator
- allocator
- allocator
- 动态内存管理allocator类
- C++ 内存分配allocator类
- 标准库中allocator类的使用
- c# MODBUS协议 上位机
- GDI+ Color 类 和 COLORREF 间如何相互转换?
- 循环之谜
- LRU Cache--LeetCode
- git 笔记整理一建立仓库
- allocator类
- 一个动态游标的完整示例
- Oracle异常处理
- UIControl
- sql经典语法二
- static 关键字
- C#listview
- UVa 1374 Power Calculus
- 在Maven仓库中添加Oracle JDBC驱动(11g)