C++学习笔记3:new

C++学习过程中经常会碰到一些关于元素的插入与删除。就容器而言,在容器对象中insert或者压入一个元素时,该对象大小会增加1。在分析容器与数组区别的时候,网友提出了,数组的大小是指定的,而容器的大小动态的。当时我也思考到,new和delete也是动态的创建数组的,这又该怎么解释呢?于是我把教材中关于new和delete的内容再搬过来,再来看看,new什么?delete什么?new有什么好处?

1:动态数组中的那些事儿

枯燥的看下了解下数组吧:数组类型的变量有三个重要的限制:1)数组长度固定不变;2)编译时必须知道其长度;3)数组在定义它的语句块内存在

大致上明白了一点:就是长度我得知道,在哪部分定义的,就用在哪部分。

BUT:这样的限制也太坑爹了吧,我编写了个程序。然后用到了数组,比如说高一的时候大家没分科,都在一起学习,有40个人。到高二了涉及到分科了,这时候呢有些人去学文科了,有些人去学理科了。对这个班来说我要保留理科班的性质,学文科的可以离开,一些别的班的学理科的也可以进来。但是怎么办呢?我只有40个位置,这时候进来学理科的比出去学文科的人多。我不能不给他们分配位置啊。但是我只有40个位置啊?好吧,我们得想个办法解决它。

这样可不可以?我们先不管它有多少个人,反正最后我都让它有位置坐,有41个人我给它41个位置,有50个我给它50个位置。反正我们安排(编译)的时候不管他多少人,只有等我们上课(运行)的时候再确定他有多少人。这样的人数我们会一直存在着(动态数组一直存在),只有等到毕业的时候,才把这个班级拆掉。(直到程序显示释放为止)。


一样的道理,跟数组一样,我们得定义它,还要初始化它。

最后分班的时候我们只要知道它是理科班还是文科班(类型)和这个班有多少人(长度)即可。

定义:int *pia = new int[40];  //我们创建了一个有40(长度)个人的理科班(类型),是由pia(指针)来当班主任。

但是我new了一个班级,那我返回什么呢?我得给我这个班有一个标识吧。那就用学霸来标识吧,班主任一般都比较喜欢第一名,那就指向第一名吧。(数组的第一个元素)

初始化:怎么初始化?一般的在C++的学习中都会涉及到类类型和内置类型。

因此在动态的数组中初始化中,类类型就是用该类的默认构造函数初始化,如果是内置类型就不初始化。


当我们毕业时。。。。。。

你们班用了3年了,要毕业了,你毕业了不能还想把这个班级占着吧,你得清空吧。那你就得释放它。都想你这样天天占着一个班,那学校早得炸了(内存逐渐耗尽)。

怎么释放呢?-------把你们班主任干掉!!!!

操作:
delete []  pia;    //班主任pia终于把你们带毕业了,它也得把你们清空了。


2、我希望new一个对象,然后不再delete她

文学家可以用很华丽的文字来表达对心爱之人的爱慕之情,但是码农也可以浪漫。你可以再Linux中写一个脚本,然后编译进内核。当她每一次开机的时候,你得情书就能华丽丽的在屏幕上跳动着她的华尔兹。但是尼玛,这也得是女码农才会用Linux啊。好吧,在没有对象之前,我们就只能先YY了,自己创造一个对象(new)。

联想到数组的new,我们知道我想要一个对象,这个对象首先是个女的(类型),没了!恩!就是没了!!! 屌丝在没有女朋友之前,要求哪有那么高,女的就行。

好吧,让我们来定义吧。

girl *me = new girl ;//一个姑娘就有了,这个姑娘是女的,是me要的女的,就是一个girl类型的,我所指向的女的。

返回的是什么?返回的肯定是我这个指针啊,都说了是我指向的。

其实呢?我还是想 多知道点这个姑娘的一些信息。比如名字?身高?那就给她赋点东西,虽然她可能会改名,也有可能会长高。但我猜她是不会变性的。

初始化:

girl *me = new girl (165);//好吧,这个姑娘有165的身高。这是她现在的身高!!!

当然了你也可以不自个给她附一些东西,因为有些东西天然的会给她附加的(默认构造函数)


恋爱中的人是疯狂的,突然有一天你发现再这么折腾下去,你精力都要被耗尽了(耗尽内存)。你就想分手了。

那你就赶紧把她给删了吧,电话本里也别留,什么都别留。

delete me; //我靠,不是删除它嘛,干嘛delete me啊?谁叫你跟人家纠缠呢?爱,最后一次有点关系吧。



总结一下:基本上我记录的笔记都没有讨论const的情况,这种情况其实也是大同小异,把教材当个工具书,你编写代码的时候突然想用const了,就去查吧。这样效率更高。


3:C++中有了malloc/free,为什么还需要new/delete?

malloc/free是C++/C语言的标准库函数,new/delete是C++运算符。它们都可用于申请动态内存和释放内存。

对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值