3.7 new和delete

这里写图片描述
这里写图片描述
这里写图片描述

#include<iostream>
using namespace std;

class Test
{
public:
    Test()
    {
        m_a = 0;
        m_b = 0;
    }
    Test(int a,int b)
    {
        cout << "Test(int, int)" << endl;
        m_a = a;
        m_b = b;
    }
    void printT()
    {
        cout << "printT :" << m_a << "," << m_b << endl;
    }
    ~Test()
    {
        cout << "~Test()" << endl;
    }
private:
    int m_a;
    int m_b;

};

//C语言中
void test1()
{
    //在堆上开辟4个字节,返回一个地址给p
    int *p = (int *)malloc(sizeof(int));
    *p = 10;//给开辟的空间赋值
    if (p !=NULL) {
        free (p);
        *p = NULL;
    }   

    //开辟数组
    int *array_p = (int *)malloc(sizeof(int) *10);//10个元素,每个元素4个字节
                                     //也可以直接写40,上面那样写增加了可读性
    //赋值
    for (int i = 0; i < 10; i++)
        array_p[i] = i +1;
    for (int i = 0; i < 10; i++)
        printf("%d " ,array_p[i]);
    printf("\n");
    if (array_p !=NULL) {
        free(array_p);
         array_p = NULL;
    }   
}

//malloc free 是函数,是标准库,stdlib.h
//new delete 是操作符(集成的),效率高,没函数压栈和出栈
//new 在堆上初始化一个对象的时候,会触发对象的构造函数。malloc不能
//free并不能触发一个对象的析构函数。

//c++中
void test2()
{//在堆上开辟4个字节,返回一个地址给p
    int *p = new int;//new是一个关键字,malloc是一个函数
    *p = 10;
    if (p !=NULL) {
        delete p;
        p = NULL;
    }


    //开辟一个10个元素,每个元素4个字节的数组
    int *array_p = new int[10];
    for (int i = 0; i < 10; i++)
        array_p[i] = i +1;
    for (int i = 0; i < 10; i++)
        cout << array_p[i] << " ";
    cout << endl;
    if (array_p !=NULL) {
        delete[] array_p;//delete数组
    }

    cout << "------------" <<endl;
    Test *tp = new Test(10,20);//触发有参构造
    tp->printT();
    Test *tp2 = new Test;//触发无参构造
    tp2->printT();
    if (tp !=NULL) {
        delete tp;
        tp = NULL;
    }

}

int main()
{
    test1();
    cout << "------------------" << endl;
    test2();
    return 0;
}

总结:

malloc free 是函数,是标准库,stdlib.h
new delete 是操作符(集成的),效率高,没函数压栈和出栈
new 在堆上初始化一个对象的时候,会触发对象的构造函数。malloc不能
free并不能触发一个对象的析构函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值