C++之new和delete

【new和delete】

C++在实例化对象的时候,系统会发生两件事情:

1.自动为对象分配内存

2.自动调用构造函数来初始化那块内存。

3.malloc不能为内存初始化,所以我们在C++中使用new和delete

1、和 malloc calloc realloc 比较

1、malloc必须返回一个指针,返回值还是void类型,c++不允许将void赋值给其他任何指针,必须强转。

2、malloc 可能申请失败,必须判断返回值来确定是否申请成功。

3、malloc 不会调用构造函数,free不会调用析构函数。

2、给基本类型申请、释放空间

int *p ;
p = new int (100)  // *p = 100;
delete p;

3、给基本数组类型申请、释放空间

int * arr = new int[100]{1,2,.......,100};//100个整型元素
char *arr = new char[100] ; // 100个字符类型元素 
delete []arr ; //new 的时候有[],释放的时候就要有[];
char *arr  = new char[32]{"hehe"} // err ;
只能一个一个写进去  或者不初始化然后使用strcpy拷进去
char *arr = new char[32]{'h','e','h','e'};



char *arr = new char ;
strcpy(arr,"hello,wrold");
    for(int i =0;i<strlen(arr);i++)
    {
        cout<<*(arr+i);
    }

 

4)给类对象申请空间

#include<iostream>
using namespace  std;

class person{

private:  char m_name[32];
        int m_age;
public: person(char *name ,int age)
        {

            strcpy(m_name,name);
            m_age = age;
            cout<<"构造函数"<<endl;
        }
        ~person()
        {

            cout<<"析构函数"<<endl;
        }
        void showperson()
        {
            cout<<"姓名:"<<m_name<<" 年龄:"<<m_age<<endl;
        }
};

void test01(void )
{

    person *ob1 = new person("bob",18);
    ob1->showperson();
    delete ob1;

}

运行结果

 分析:使用new的时候会自动调用构造函数,使用delete的时候会自动调用析构函数。

5)对象数组

void test03()
{
    person *arr  = new person[2]{person("lucy",12),person("bob",13)};
    //指针访问
    arr->showperson();
    (arr+1)->showperson();
    //数组下标访问
    arr[0].showperson();
    arr[1].showperson();
    //数组下标等同于指针偏移量
    (*(arr)).showperson();
    (*(arr+1)).showperson();
    delete []  arr;

}

运行结果

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值