栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++杂讲 new和delete

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++杂讲 new和delete

目录

知识点1 【new为基本类型 申请堆区空间】

 知识点2 【new为基本类型数组 申请堆区空间】

注意:

 知识点3 【new申请自定义数据类型】(结构体、类型对象)

 知识点4 【c++中申请堆区空间】

(1)、给对象申请空间需要做的事情

(2)、释放对象空间需要做的事情

知识点5 【对象数组】

(1)、本质是数组 只是数组的每个元素是类的对象

(2)、如果想让对象数组中的元素调用有参构造 必须人为使用 有参构造初始化。

(3)、用new delete申请 对象数组

 知识点6 【delete不能作用void *修饰的对象指针】

 知识点7 【malloc、free和new、delete 不可以混搭使用】

new从堆区申请, delete释放堆区空间

知识点1 【new为基本类型 申请堆区空间】
void test01()
{
    //1、 申请空间
    int *p = NULL;
    p = new int;//申请空间
    *p = 100;
    cout<<"*p = "<<*p< 知识点2 【new为基本类型数组 申请堆区空间】 

注意:

        new 没有加[] delete释放的时候 就不加[]

        new 加[] delete释放的时候 就加[]

void test02()
{
    int n = 5;
    int *arr = NULL;
    //申请基本类型数组类型
    arr = new int[n]{10,20,30,40,50};

    int i=0;
    for(i=0;i 

 知识点3 【new申请自定义数据类型】(结构体、类型对象)
class Data
{
public:
    int m_a;
    int m_b;
public:
    Data()
    {
        m_a = 0;
        cout<<"Data无参构造 m_a = "< 知识点4 【c++中申请堆区空间】 

建议使用new、delete 而不是malloc,calloc,realloc和free

(1)、给对象申请空间需要做的事情

        申请堆区空间(malloc,calloc,realloc) (new)

        调用构造函数(new)

(2)、释放对象空间需要做的事情

        调用析够函数(delete)

        释放堆区空间(delete) (free)

总结:

        new能申请空间调用构造函数,而malloc,calloc只能申请空间, delete会调用析够函数释放空间,而free只能释放空间

知识点5 【对象数组】

(1)、本质是数组 只是数组的每个元素是类的对象

运行结果: 

 

(2)、如果想让对象数组中的元素调用有参构造 必须人为使用 有参构造初始化。
void test07()
{
    //对象数组 arr1是数组 每个元素是Person类型的对象
    //定义对象数组的时候 系统会自动给 数组中的每个元素 调用构造函数
    //人为 为元素 调用有参构造
    //初始化部分 调用有参构造 未初始化部分自动调用默认构造(无参构造)
    Person arr1[5]={ Person("lucy",18), Person("bob",20)};
    //arr1[0] 第0个元素 就是Person的对象
    arr1[0].showPerson();
    arr1[1].showPerson();
}

运行结果:

(3)、用new delete申请 对象数组
void test08()
{
    //第一种方式
    Person *arr = NULL;
    arr = new Person[5];//调用无参构造

    delete [] arr;

    //第二种方式:
    //初始化的元素 调用有参构造 没有初始化 的调用无参构造
    Person *arr2 = new Person[5]{Person("lucy",18), Person("bob",20)};
    (*(arr2+0)).showPerson();
    arr2[0].showPerson();
    (arr2+1)->showPerson();
    delete [] arr2;
}

 知识点6 【delete不能作用void *修饰的对象指针】

 尽量不要用delete释放void *

 注意:没有析构?为哈?

delete发现p1指向的类型 为void 无法从void中寻找响应析构函数

 知识点7 【malloc、free和new、delete 不可以混搭使用】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/937903.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号