关于C++中动态创建对象

本文比较了malloc、realloc、calloc与new在动态创建对象时的行为,指出malloc等需要手动管理内存和构造/析构函数,而new自动调用构造/析构,建议优先使用new以简化开发。
摘要由CSDN通过智能技术生成

动态创建对象有两种方法,一种是malloc, realloc, calloc,另一种是new,那么他们有什么不同呢?

一.利用malloc动态创建对象

malloc, realloc, calloc 在堆中创建空间, 
当内存空间创建完之后,它不会去主动调用构造函数进行初始化,只能通过我们书写初始化函数,

在函数进行完之后也不会主动调用析构函数释放对象,也需要我们手动free掉这个对象。

那有些同学就要问了,他不会主动调用,那么我们用户可以显示调用构造函数和析构函数吗?

其实是可以的,但没什么必要

因为就算我们显示调用了构造函数和析构函数,他们也只会当作一个普通函数去使用,而不会去创建对象和销毁对象。我们还需要在构造函数和析构函数里面去书写我们想要实现的功能,但这些功能我们写在普通的函数里面也是ok的。

我们看上面那串代码,第36行是使用malloc动态创建对象的格式。我们需要计算对象的内存大小,还需要强转,(强转其实是因为malloc总会返回一个void指针,但是void在C++中是不允许被赋值给其他指针的,所以需要强转。)37行是如果我们要显示调用构造函数书写的格式,38行那种写法编译器是不会通过的,这个大家记住就好。

40行是如果我们在构造函数中如果给数据成员动态分配了内存空间,我们可以在clean函数里面释放掉,42行是析构函数显示调用的格式。

可以看到利用malloc和free是非常麻烦的,他们不会主动触发构造函数和析构函数,下面我们介绍一下new和delete。

二.利用new方式动态创建对象

new也是在堆区创建空间

格式如上图所示,但是当我们使用new时,系统会主动调用构造函数,delete去释放对象时,也会主动调用构造函数,这种方式明显优化了,并且我们也不用去强转以及计算对象所占空间的大小了。

运行结果如下,(代码只有主函数更换了,上面的类和malloc使用的一个代码)

综上所述,我们动态创建对象时尽量使用new来创建。

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值