[C++]对象创建的两种方式

本文详细阐述了C++中使用new方式创建对象及其注意事项,包括构造函数与析构函数的作用,以及如何正确释放内存避免内存泄漏。同时,对比了直接使用类定义申明创建对象的方法,解释了构造函数的不同调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

也不知道到底是怎么回事,最近学了C++以后老是会混淆两种创建对象的方法,这里做一个大体的总结:

第一种:使用new的方式创建的对象

 

clock* alarm = new clock;
delete alarm; 

这种方式有两点需要注意的,一点是用new创建的是对象指针,此时将调用构造函数,delete的也是对象指针,此时将调用析构函数。

 

也可以先定义类指针,然后再用new开辟内存空间。

以下是《C++primer plus Edition 6》里的关于new的摘抄:

4.7.4 使用new来分配内存:

程序员要告诉new,需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存块的地址,程序员的责任是将该地址付给一个指针。下面是一个这样的示例:

 

int * pn = new int;

new int告诉程序,需要适合存储int的内存。new运算符根据类型来确定多少字节的内存。然后他找到这样的内存,并返回其地址。接下来将地址赋给pn,pn是被声明为指向int的指针。现在,pn就是地址,而*pn就是存储在那里的值。

 

计算机可能会由于没有足够的内存而无法满足new的请求。造成内存耗尽的情况发生。对于此种情况c++提供了检测并处理内存分配失败的工具。

4.7.5 使用delete释放内存

当需要内存时,可以用new来申请,而使用delete运算符,是的内存使用完了以后能够将其归还给内存池。使用delete时,后面要加上指向内存块的指针,这些内存块最初是由new分配的:

int * ps = new int;
......
delete ps;

这将释放ps指向的内存,但不会删除ps指针本身。例如,可以将ps重新指向一个新分配的内存块。一定要配对的使用new和delete;否则将发生内存泄漏(memory lack),也就是说,新分配的内存再也无法使用了。如果内存泄露严重,则程序将由于不断寻找新的更多内存而终止。

不要尝试释放已经释放的内存块,这意味着什么都不会发生。

<span style="font-size:18px;">警告:只能用delete来释放使用new分配的内存。然而,对于空指针使用delete是安全的。</span>


第二种:不用new,直接使用类定义申明

clock alarm;

这种创建对象的方法不需要显式地调用delete,析构函数会自动调用。

又:

clock alarm();//这种方式是错误的,只有在调用带参数的构造函数创建对象时,才会用括号()把参数传进去,如果想调用无参数的构造函数创建对象,是不能带括号的,编译器会报错。
clock alarm;//调用的是不带参数的构造函数,不定义的话,编译器会默认一个
clock alarm(alarm2);//调用的是复制构造函数,没定义的话,编译系统也会自动提供一个默认的复制构造函数,但只是简单地复制类中每个数据成员,定义的话,就会调用是你自己的。
clock alarm(1,2);//调用自己写的构造函数,有两个传入参数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山猫Show

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值