C++学习笔记-内存管理与指针

一、使用new和delete时,应遵循以下规则:

1、不要使用delete来释放不是new分配的内存。

2、不要使用delete释放同一个内存块两次。

3、如果使用new[]为数组分配内存,则应使用delete[]来释放。

4、如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。

5、对空值指针应用delete是安全的。

二、句点操作符和箭头操作符的规则:

1、如果结构标识符是结构名,则使用句点操作符;

2、如果标识符是指向结构的指针,则应使用箭头操作符(->)

时间: 2024-10-12 22:03:09

C++学习笔记-内存管理与指针的相关文章

JVM学习笔记-内存管理

第一章 内存分配 1. 内存区域. 方法区和堆(线程共享),程序计数器 , VM栈 和 本地方法栈(线程隔离). 1) java虚拟机栈:线程私有.描述的是java方法执行的内存模型:栈帧,用户存储 局部变量表,操作数栈,动态链接,方法出口等信息. 局部变量表在编译时即可完全确定!如果线程请求的栈深度大于 规定的深度,StackOverflowError. 2) 本地方法栈,类似. 3)堆:垃圾收集器管理的主要区域.线程共享. 4)方法区: 各个线程共享.存储:加载的类信息,常量,静态变量,即时

23-黑马程序员------OC 语言学习笔记---内存管理

黑马程序员------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 对于面向对象的变成语言,程序需要不断地创建对象.初始,创建的所有程序通常都有指针指向它,程序可能需要访问这些对象的实例变量或调用这些对象的方法,随着程序的不断执行,程序再次创建了一些新的对象,而那些老的对象已经不会再被调用,也不

Cocos2d-x学习笔记—内存管理机制

Cocos2d-x 3.x内存管理机制 1:C++内存管理 1-1:内存分配区域 创建对象需要两个步骤:第一步,为对象分配内存:第二步,调用构造函数初始化内存.在第一步中,可以选择几个不同的分配区域.这几个区域如下: (1) 栈区域分配.栈内存分配运算内置于处理器的指令集中,效率很髙,但是分配的内 存容量有限.由处理器自动分配和释放,用来存放函数的参数值和局部变量的值等.在执 行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放. (2) 堆区域分配.从堆上分

2015 IOS 学习笔记 内存管理,页面跳转 ——蓝懿教育

——————————内存管理———————————————— 手动内存管理(MRC)中常用的三个方法 retain:导致内存计数+1 release:导致内存计数-1 copy:复制出来一个新的对象 和之前对象的数据可能一致 但是 不是同一个对象 此对象内存计数是1 autorelease:自动释放 当变量出了自动释放池之后会自动释放 自动释放池在项目中有很多看不见的 属性描述关键字: retain/strong: //如果是retain 会做两件事 //-(void)setNames:(NSM

Objective-C学习笔记 内存管理

引用计数 每个对象都有一个与之相关联多整数,被称作它的引用计数器或保留计算器,当某段代码需要访问一个对象时,该代码就将该对象的保留计数器值加1,表示我要访问该对象,当这段代码访问结束的时候,将对象的保留计数器数值减1,表示不再访问该对象了.当保留计数器的值为0时,表示不再有代码访问该对象了,此时它将被销毁同时占用的内存被回收. 对象的保留计数器值初始值为1.当一个对象即将要被销毁的时候,OC会向对象发送一条dealloc消息,这条消息可以在自己的对象中重写. 常见的几种调用方法: -(id) r

Linux内存管理学习笔记——内存寻址

最近开始想稍微深入一点地学习Linux内核,主要参考内容是<深入理解Linux内核>和<深入理解Linux内核架构>以及源码,经验有限,只能分析出有限的内容,看完这遍以后再更深入学习吧. 1,内存地址 逻辑地址:包含在机器语言中用来指定一个操作数或一条指令的地址. 线性地址:一个32位无符号数,用于直接映射物理地址 物理地址:片上引脚寻址级别的地址 2,逻辑地址->线性地址 2.1 段选择符与段寄存器 逻辑地址:段选择符(16位)+段内偏移(32位) index:在GDT或L

C++学习笔记8-操作符&amp;指针

1.  重载操作符 赋值操作符的返回类型应该与内置类型赋值运算返回的类型相同.内置类型的赋值运算返回对右操作数的引用,因此,赋值操作符也返回对同一类类型的引用.例如,Sales_item的赋值操作符可以声明为: class Sales_item { public: // other members asbefore // equivalent to thesynthesized assignment operator Sales_item&operator=(const Sales_item &a

Git 学习笔记&lt;分支管理&gt; (三)

分支是什么? 分支就像树分出的树枝,不同的是,它们之间可以互相合并. 将版本的推进想象成一个链表的伸长:  version 1.0 ==> version 2.0 ==>version3.0  . master是主要的分支基本上用于发布产品.你可以从master分出一个dev,在上面创建新功能,或者修bug然后调试.最后再合并到master里面.就像下面这样. master分支:  version 1.0=========>version 2.0===... \            

Linux 程序设计学习笔记----进程管理与程序开发(上)

转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢! Linux进程存储结构和进程结构 可执行文件结构 如下图: 可以看出,此ELF可执行文件存储时(没有调入内存)分为代码区.数据区和未出花数据区三部分. 代码区:存放cpu的执行的机器指令. 数据区:包含程序中的已经初始化的静态变量,以及已经初始化的全局变量. 未初始化数据区:存入的是未初始化的全局变量和未初始化的静态变量. 现在在上面的程序代码中增加一个int的静态变量