七、对象的动态建立和释放

一、new和delete基本语法

> new运算符动态分配堆内存

使用形式:        1.指针变量 = new 类型(常量);

                          2.指针变量 = new 类型(表达式);

作用:从堆上分配一块“类型”大小的存储空间,返回首地址。

其中:“常量”是初始化值,可缺省。

        创建数组对象时,不能为对象指定初始值。

> delete运算符释放已分配的内存空间

使用形式:        1.detele 指针变量;

                          2.detele[ ]指针变量;

其中:“指针变量”必须是一个 new 返回的指针。

//在堆上申请一个int类型大小的空间(4Bytes),并且将申请的堆空间的内容初始化为10
int *p = new int(10);
delete p;   

//在堆上申请4个int类型大小的空间(4*sizeof(int)==16Bytes) 4:数组长度
int *p2 = new int[4];
delete[] p2;
class Animal
{
public:
    int age;
    int len;
    /* 默认构造函数 */
    Animal()
    {
        cout<<"Animal()"<<endl;
    }
    Animal(int x,int y):age(x),len(y)
    {
        cout<< "Animal(int x,int y):age(x),len(y)"<<endl;
    }
};

int main()
{
    //在堆上申请一个Animal类型大小的空间
    Animal *p3 = new Animal; //调用无参构造函数
    delete p3;
    //在堆上申请二个Animal类型大小的空间
    Animal *p4 = new Animal[2];//调用无参构造函数
    delete[] p4;
    //在堆上申请一个Animal类型大小的空间
    Animal *p5 = new Animal(10,10);//调用带参数的构造函数
    delete p5;
    return 0;
}

 二、new 和 delete 和 malloc free的区别

注意:new 和 delete是运算符,不是函数,因此执行效率高。

 虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和free函数,而用new和delete运算符。

区别

1.malloc和free为C标准库函数new、delete则为C++的操作运算符

2.new能自动计算需要分配的内存空间,而malloc需要手工计算字节数

3.new与delete直接带具体类型的指针,而malloc和free返回void类型的指针

4.new类型是安全的而malloc不是,例如int* p=new float[2]就会报错,而int p等于malloc(2*sizeof(int))编译时编译器就无法指出错误来

5.new 调用构造函数malloc不能delete调用析构函数,而free不能

6.new/delete 是操作符可以重载malloc/free则不能

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值