动态对象创建

本文探讨了C语言中malloc和free的使用,包括手动内存管理的注意事项,以及C++中new操作符的优势。new不仅负责分配内存,还会调用构造函数进行初始化,而malloc则不会。在使用delete释放内存时,new和delete需要匹配使用,new[]对应delete[]。
摘要由CSDN通过智能技术生成

动态对象创建


C语言中malloc和free的问题:


    1. 程序员必须确定对象的长度;
    2. malloc 返回一个 void*指针,C++不允许将 void*赋值给其他任何指针, 故必须强转;
    3. malloc 可能申请内存失败, 所以必须判断返回值来确保内存分配成功;
    4. 用户在使用对象之前必须记住对他初始化, 构造函数不能显示调用初始化(构造函数是由编译器调用), 用户有可能忘记调用初始化函数。


new operator


    new 会返回一个该类型的指针。
    默认调用构造函数,开辟空间,返回不是void*,不要强制转换
    delete 释放
    new 对象用 void* 去接收,释放不了对象
    new 出来的是数组,如何释放?delete [] ...
    new 出来的是数组,肯定调用默认构造
    
    Person * person = new Person;//堆区开辟
    相当于:
    Person* person = (Person*)malloc(sizeof(Person));
    if(person == NULL){
        return 0;
    }
    person->Init();//构造函数
    
    New操作符能确定在调用构造函数初始化之前内存分配是成功的,所以不用显示确定调用是否成功。
    
    所有new出来的对象&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值