[C++] 空间配置器——allocator类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[C++] 空间配置器——allocator类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2250字,纯文字阅读大概需要4分钟。
内容图文
![[C++] 空间配置器——allocator类](/upload/InfoBanner/zyjiaocheng/845/0218a243be454c0a8b29adb9d14fa45a.jpg)
1、new和delete有一些灵活性上的局限:new把内存分配和对象构造组合在了一起;delete将对象析构和内存释放组合在了一起。 ? 2、当分配一大块内存时,我们通常计划在这块内存上按需构造对象,在此情况下,我们希望将内存分配和对象构造分离;这意味着我们可以分配大块内存,但只在真正需要的时候才真正执行对象创建操作。 ? 3、allocator类,定义在头文件memory中,它帮助我们将内存分配和对象构造分离开来,它提供一种类型感知的内存分配方法,它分配的内存是原始的、未构造的。在分配内存时,它会根据对象类型来确定恰当的内存大小和对齐位置。 ? 4、allocator类中的算法
#ifndef _ALLOCATOR_H_ #define _ALLOCATOR_H_ #include<memory> #include<string> #include<iostream> #include<vector> using namespace std; class Allocator { //这个是自己命名的类 public: /** * 内存分配练习 * allocate(n),分配大小为n未初始化空间; * construct(q),对q指向的空间进行默认初始化;construct(q,"j"),对q指向的空间初始化为"j",只要是合法的初始化器就可以; * destroy(q),对q指向的对象进行析构 * deallocate(p,n),释放原始分配的空间,必须先把内存中的对象全部析构,然后全部释放,不能只释放一部分 */ void allocator_test(const int &n) { allocator<string>alloc; auto p = alloc.allocate(n);//分配保存n个string的原始内存 auto q = p; while (q != p + n) { alloc.construct(q++, "zhizhiyu");//构造n个string } cout << "构造的第一个string是:"<<*(p) << endl; while (q != p) { alloc.destroy(--q);//对分配的对象进行析构 } alloc.deallocate(p, n);//释放内存 } /** * 拷贝和填充原始内存,allocate,deallocate, * uninitialized_copy(b,e,b2),向原始空间b2中拷贝由b和e指定范围的元素,返回递增之后的目的位置寄存器,指向下一个未构造的位置 * uninitialized_copy_n(b,n,b2),向原始空间b2中拷贝由b开始的n个元素,返回递增之后的目的位置寄存器,指向下一个未构造的位置 * uninitialized_fill(b,e,t),b和e范围指定的原始内存用元素t填充,无返回值 * uninitialize_fill_n(b,n,t),b开始的n个原始内存空间用元素t填充,无返回值 */ void alloc_copy_and_fill(const vector<int>&v) { int n = v.size(); allocator<int> alloc; auto p = alloc.allocate(n * 4); auto q = uninitialized_copy(v.begin(), v.end(), p);//拷贝v到未初始化空间中 q = uninitialized_copy_n(v.begin(), n, q);//再把v拷贝一遍 uninitialized_fill(q, q + n, 22);//用22填上接下来n个空间 uninitialized_fill_n(q+n, n, 44);//剩余n个空间变为44 auto pq = q + 2*n; while (pq != p) { cout << *(--pq) << " "; alloc.destroy(pq); } alloc.deallocate(p, n * 4); } }; #endif
内容总结
以上是互联网集市为您收集整理的[C++] 空间配置器——allocator类全部内容,希望文章能够帮你解决[C++] 空间配置器——allocator类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。