/* StrVec.h */ #ifndef _STRVEC_H_ #define _STRVEC_H_ #include <memory> #include <string> #include <vector> #include <utility> class StrVec { public: StrVec() : first(nullptr), last_end(nullptr), cap(nullptr){} StrVec(const StrVec&a…
动态内存与只能指针 静态内存用来保存局部static对象, 类static数据成员以及定义在任何函数之外的变量. 栈内存用来保存定义在函数内的非static对象. 分配在静态或栈内存中的对象由编译器自动创建和销毁. 栈中的对象, 仅在其定义的程序块运行时才存在; static对象在使用之前分配, 在程序结束时销毁. 自由空间或堆用来存储动态分配的对象--即在程序运行时分配的对象. 动态对象的生存期由程序来控制, 也就是说, 当动态对象不在使用时, 我们的代码必须显示地销毁它们. 动态内存与智能指…
StrVec类的设计 [题目描述]:我们将实现标准库vector类的一个简化版本,我们所做的一个简化是不使用模板,我们类只用于string,因此,它被命名为StrVec. #include<iostream> #include<string> #include<memory> using namespace std; class StrVec { public: StrVec(): elements(nullptr), first_free(nullptr), cap(…
StrBlob是一个管理string的类,借助标准库容器vector,以及动态内存管理类shared_ptr,我们将vector保存在动态内存里,这样就能在多个对象之间共享内存. 定义StrBlob类: #include <iostream> #include <stdexcept> #include <memory> #include <vector> #include <string> #include <initializer_lis…
今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自己写了一份简单的int版. 实现思路: 1.初始化时,容器容量为1. 2.往容器添加数据时,如果容器没有放满,就直接放进去. 3.往容器添加数据时,如果容器已经满了: 3.1 申请新的更大的存储空间(2倍) 3.2 把原来的数据复制到新的存储空间 3.3 删除旧的存储空间 3.4放入数据 代码如下: // 1…
右值引用 所谓的右值引用就是必须将引用绑定到右值的引用,我们通过&&来绑定到右值而不是&, 右值引用只能绑定到即将销毁的对象.右值引用也是引用,因此右值引用也只不过是对象的别名而已.右值引用可以绑定到要求转换的表达式.字面常量或者返回右值的表达式,但是右值不能绑定到一个左值上. int i = 42; int &r = i; // 正确,r引用i int&& rr = i; // 错误,不能将右值引用绑定到左值 int &r2 = i * 42; /…
引言 在本篇文章中,我们主要剖析c++中的动态内存管理,包括malloc.new expression.operator new.array new和allocator内存分配方法以及对应的内存释放方式和他们之间的调用关系,另外也包括一些会引发的陷阱如内存泄漏. 动态内存管理函数及其调用关系 c++中的动态内存分配和释放方式有很多,主要包括: malloc与free new expression与delete expression array new 与array delete operator…
C++中的动态内存管理是通过new和delete两个操作符来完成的.new操作符,为对象分配内存并调用对象所属类的构造函数,返回一个指向该对象的指针.delete调用时,销毁对象,并释放对象所在的内存.但在程序中使用new和delete容易导致很多问题,这里列出三个比较容易犯的错误. 我们new了一个对象,但没有delete它.这会引起memory leak内存泄露,可能会导致程序崩溃. 用指针访问一个已经被free的对象.这就是我们常说的dangling pointer. delelte同一个…
动态内存的堆区 /* 堆区共用体定义 */ typedef union { /* 可以以4字节来访问堆区,也可以以1个字节来访问 */ ]; /* required for proper alignement */ U8 abHeap[GUI_ALLOC_SIZE]; } GUI_HEAP; /* 堆区的数据 */ GUI_MEM_ALLOC GUI_HEAP GUI_Heap GUI_ALLOC_LOCATION; 管理动态内存需要的管理信息节点结构体 /* 动态内存管理信息节点结构体 */…
源:Keil C动态内存管理机制分析及改进 Keil C是常用的嵌入式系统编程工具,它通过init_mempool.mallloe.free等函数,提供了动态存储管理等功能.本文通过对init_mempool.mallloe和free这3个KeilC库函数源代码的分析,揭示其实现的原理和方法,并对其中的不足作了改进,以使Keil C编程人员更好地应用动态存储管理. 1 相关数据结构.变量及说明 在Keil C安装目录下的\c5l\lib目录下,有实现init_mempool.mallloe和fr…