StrVec类的设计 [题目描述]:我们将实现标准库vector类的一个简化版本,我们所做的一个简化是不使用模板,我们类只用于string,因此,它被命名为StrVec. #include<iostream> #include<string> #include<memory> using namespace std; class StrVec { public: StrVec(): elements(nullptr), first_free(nullptr), cap(…
/* 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…
拷贝, 赋值与销毁 当定义一个类时, 我们显示地或隐式地指定在此类型的对象拷贝, 移动, 赋值和销毁时做什么. 一个类通过定义5种特殊的成员函数来控制这些操作, 包括: 拷贝构造函数, 拷贝赋值运算符, 移动构造函数, 移动赋值运算符和析构函数. 编译器可以合成这些成员函数, 其他的函数不能合成. 拷贝和移动构造函数定义了当用同类型的一另一个对象初始化本对象时做什么, 拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么. 这些操作称为拷贝控制操作. 如果我们不显式地定义这些操作,…
今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自己写了一份简单的int版. 实现思路: 1.初始化时,容器容量为1. 2.往容器添加数据时,如果容器没有放满,就直接放进去. 3.往容器添加数据时,如果容器已经满了: 3.1 申请新的更大的存储空间(2倍) 3.2 把原来的数据复制到新的存储空间 3.3 删除旧的存储空间 3.4放入数据 代码如下: // 1…
引言 在本篇文章中,我们主要剖析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…
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 动态内存管理,动态内存管理是 FreeRTOS 非常重要的一项功能,前面章节讲解的任务创建. 信号量. 消息队列. 事件标志组. 互斥信号量. 软件定时器组等需要的 RAM 空间都是通过动态内存管理从 FreeRTOSConfig.h 文件定义的 heap 空间中申请的. 动态内存管理介绍FreeRTOS 支持 5 种动态内存管理方案,分别通过文件 heap_1,hea…
引用: 引用就是另一个变量的别名,通过引用所做的读写操作实际上是作用于原变量上. 由于引用是绑定在一个对象上的,所以定义引用的时候必须初始化. 函数参数:引用传递 1.引用可做函数参数,但调用时只需 传普通变量即可 2.在被调函数中改变引用变量的值,则改变的是实参的值 #include<iostream> #include<algorithm> #include<cmath> using namespace std; void swep(int &n1,int…