stl内存管理
来源:互联网 发布:淘宝为什么没有尺码 编辑:程序博客网 时间:2024/06/05 10:40
首先介绍new
表达式和delete
表达式的工作机理:
// new表达式string* sp = new string("a value"); // 分配并初始化一个string对象string* arr = new string[10]; // 分配10个默认初始化的string对象
使用new
表达式时,实际上执行了三步:第一步,new
表达式调用 operator new(operator new[])
标准库函数,分配一块足够大、原始的、未命名的内存空间以便存储特定类型的对象。第二步,编译器运行相应的构造函数以构造这些对象,并为其传入初始值。第三步,对象被分配了空间并构造完成,返回一个指向该对象的指针。
相应地,当使用delete([])
,实际执行了两步操作。第一步,对指针所指的对象执行相应的析构函数。第二步,编译器调用operator delete(operator delete[])
标准库函数释放内存空间。
这里对operator new
分配的内存空间我们使用placement new
来构造对象。
new(place_address) typenew(place_address) type (initializers)new(place_address) type[size]new(place_address) type[size] {braced initializer list}
以上过程涉及的c++
语法细节可以参阅c++ primer
。
为了精密分工,stl allocator决定将这两阶段操作区分开来。内存配置操作由allocator::allocate()
负责,内存释放操作由allocator::deallocate()
负责,对象构造操作由::construct()
负责,对象析构操作由::destory()
负责。 allocator.h
定义了配置器allocator
; stl_construct.h
定义了全局函数construct()
和destory()
,负责对象的构造和析构; stl_uninitialized.h
定义了全局函数,用来fill
或copy
大块内存数据,uninitialized_copy()
、uninitialized_fill()
和uninitialized_fill_n()
函数。
- stl的内存管理
- stl 内存管理【转】
- SGI STL 内存管理
- STL的内存管理
- STL内存管理
- stl vector 内存管理
- stl内存管理
- SGI STL 内存管理
- STL内存管理
- SGI STL 内存管理
- STL的内存管理
- STL 内存管理
- 谈STL二级内存管理
- 有感于STL的内存管理
- STL SGI内存的管理
- 有感于STL的内存管理
- 有感于STL的内存管理
- SGI STL 的内存管理
- Eclipse实现DFS部分操作复习(2)
- 初始化和清理
- eclipse下切换svn用户和 svn插件的使用
- FragmentTableHost+Fragment
- 收藏的一些有用的链接
- stl内存管理
- 中标软件(中标麒麟操作系统)的认证兼容列表
- 第十四周3
- Cpp.P笔记02
- loadrunner测试登录接口方法(带sha1签名算法参数)
- 第十四周—进制转换
- Android动态设置ImageView的src
- 安装docker百度知道
- MatConvNet的function vl_compilenn(varargin)函数问题