对象/对象指针 以及背后的堆栈

本文详细解析了C++中对象与对象指针的区别,重点介绍了堆内存管理方式,包括new与delete操作符的使用,以及delete与delete[]的区别。文章还提到了在构造函数和析构函数中如何正确管理内存,确保程序的稳定运行。

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

对象:构造一个新的对象时,在栈上为其分配内存,自动调用析构函数,不需要主动调用delete函数。

对象指针:new一个对象指针时,首先在堆上创建一个对象,再将对象资源的首地址赋值给对象指针。其内存需要调用delete显式释放,调用delete函数时,会将其在堆上的资源全部释放,但对象指针仍然指向那块内存,所以需要将对象指针赋值为空。

 

 

总结:堆上的资源需要主动delete,所以若在构造函数中使用了new来初始化了类的某个对象指针成员,析构函数中需要记得调用delete函数释放其资源。

程序里面的static变量 常量 malloc分配的内存  对象指针所指向的内存,都在堆上。堆内存在函数退出时,不会被释放,其地址是可以作为函数的返回值的。

 

 

 

delete和delete[]的区别:

类对象(c++中string是一个类):

A *a = new A[10]

//delete a;//释放a指向的全部内存,调用a[0]对象的析构函数。

delete[]  a;//释放a指向的全部内存,调用a[0]~a[9]的全部析构函数。

内置的数据类型:

如int  double等,他们不是类,没有析构函数,所以delete和delete[]效果是一样的

 

 

转载于:https://my.oschina.net/u/2279140/blog/772317

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值