C++编程思想学习——动态对象创建
来源:互联网 发布:iphone进水数据恢复 编辑:程序博客网 时间:2024/06/07 02:20
1、 对象的创建
a) 创建一个对象时会发生两件事:为对象分配内存、调用构造函数来初始化那块内存。
b) 分配内存:可以在程序运行前在静态存储空间分配;无论什么时候在一个特殊的执行点,即在左大括号时可以在存储单元上创建一定的存储;同时也可以从一块称为为堆的地方分配,在运行时分配这些内存。
c) C语言利用malloc、free等函数来动态的申请内存。但是,由于malloc申请的只是一块内从而不是一个对象,所以,在使用之前必须对malloc返回的void*进行强制转化,然后对这块内存进行初始化,同时,释放时也必须有free来释放。
d) Operator new:由于,对象的内存的申请和对象的初始化是分开的。所以,很容易被遗忘,导致程序出错,而在C++中把创建一个对象的动作都集成在了一个new的运算符里。
e) Operator delete:new的反面是delete表达式,delete先调用析构函数,然后释放内存。Delete释放时需要对象的地址。用new申请的内存不用free释放以免对象还未调用析构函数,就释放了内存。
f) 使用delete释放内存时,如果指针指的为一个对象,则使用:delete ptr,但如果指向的是一个数组,则为了释放数组的所有内存而不是数组中的第一个元素,必须告诉编译器这是一个数组,使用如下方式:delete []ptr;
g) 当内存耗尽时,继续使用new进行存储空间的分配会引起异常。引起异常后默认会调用new.h文件中new-hander函数,若想在发生内存耗尽时使用自己的异常处理函数,则可以使用重载new-hander的方法或者可以写一个异常处理函数,然后将此函数的入口地址设置为发生内存耗尽异常时的默认处理函数。
h) 如果程序对内存分配和释放的效率以及内存的有效使用要求比较严格。则可以以重载运算符new和delete的方式重载全局内存分配函数以及释放函数(new和delete)或者是针对特定类的分配函数以及分配函数(new和delete)。
2、 构造函数的调用
使用new来创建一个新的对象时我们知道分为两步:1、申请一块内存,并返回这块内
存的指针;2、在该内存空间上调用构造函数初始化这块内存。所以,如果在第一步中存在内存不足,则第二步的构造函数并不会被调用。
3、 定位new和delete
在一些嵌入式系统中可能要求一个对象和一个特定的硬件是同义的。所以,就需要在特
定的地址存放特定的对象。而这个可以在重载运算符new和delete时,添加新的参数(如:地址或者对象的引用来)达到这一目的。
本文为个人学习C++编程思想时个人心得体会,所以,难免有不严谨之处,甚至有可能是错误的理解。如发现错误,或者疑问。欢迎提出讨论,共同学习、进步。
- C++编程思想学习——动态对象创建
- C++编程思想笔记——动态对象创建
- iOS—学习面向对象编程思想
- C++编程思想学习笔记---第13章 动态创建对象
- C++编程思想(2nd卷一):动态对象创建
- C++编程思想(2nd卷一):动态对象创建
- C++编程思想--动态对象的创建(1)
- C++编程思想--动态创建对象(2)
- 面向对象编程思想学习——对象和类
- C++编程思想学习-对象的创建与使用
- Java编程思想学习笔记——对象导论
- java编程思想学习日志——对象导论
- java编程思想学习日志——一切都是对象
- iOS—学习面向对象编程思想(二)
- Java SE学习笔记:面向对象编程——继承思想、多态思想
- C++编程思想学习—C++中的C特征
- 《C++编程思想》 第十二章 动态对象创建 (原书代码+习题+解答)
- 《Java编程思想》学习之对象入门1.4对象的创建和存在时间
- 如果改变erlang的当前工作路径
- Web自动化测试中针对图片验证码问题的常见解决思路
- Qt之QTcpServer/QTcpSocket简单收发信息(2)
- J2ME 拼图游戏 快速开发 全过程 (一)——开发环境及游戏菜单
- AVD 无法启动
- C++编程思想学习——动态对象创建
- HDOJ-3746 利用KMP的fail数组
- 3dplanesoft 30全套注册码
- AlertDialog教学
- JNI java.lang.UnsatisfiedLinkError
- Centos下安装MySQL全过程(linux下安装MySQL)
- 为什么用IBATIS不用Hibernate及不用JDBC而用IBATIS
- 關於圖片隨著dpi改變
- TCp传输粘包问题