189 8069 5689

C++之new和delete-创新互联

【new和delete】

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

创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站建设、成都网站制作、简阳网络推广、小程序制作、简阳网络营销、简阳企业策划、简阳品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;创新互联为所有大学生创业者提供简阳建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

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

4)给类对象申请空间
#includeusing 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<<"构造函数"<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;

}

运行结果:

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前题目:C++之new和delete-创新互联
新闻来源:http://cdxtjz.cn/article/deijch.html