C++编程思想学习——动态对象创建

1、  对象的创建

a)         创建一个对象时会发生两件事:为对象分配内存、调用构造函数来初始化那块内存。

b)        分配内存:可以在程序运行前在静态存储空间分配;无论什么时候在一个特殊的执行点,即在左大括号时可以在存储单元上创建一定的存储;同时也可以从一块称为为堆的地方分配,在运行时分配这些内存。

c)         C语言利用mallocfree等函数来动态的申请内存。但是,由于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)        如果程序对内存分配和释放的效率以及内存的有效使用要求比较严格。则可以以重载运算符newdelete的方式重载全局内存分配函数以及释放函数(new delete)或者是针对特定类的分配函数以及分配函数(new delete)

2、  构造函数的调用

使用new来创建一个新的对象时我们知道分为两步:1、申请一块内存,并返回这块内

存的指针;2、在该内存空间上调用构造函数初始化这块内存。所以,如果在第一步中存在内存不足,则第二步的构造函数并不会被调用。

3、  定位newdelete

在一些嵌入式系统中可能要求一个对象和一个特定的硬件是同义的。所以,就需要在特

定的地址存放特定的对象。而这个可以在重载运算符newdelete时,添加新的参数(如:地址或者对象的引用来)达到这一目的。

      本文为个人学习C++编程思想时个人心得体会,所以,难免有不严谨之处,甚至有可能是错误的理解。如发现错误,或者疑问。欢迎提出讨论,共同学习、进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值