• 【C++札记】new和delete


    介绍

    1.malloc,free和new,delete区别。

       a.malloc,free是C/C++的标准库函数。new,delete是c++的操作符。

       b.malloc申请的是内存,严格意义不是“对象”,new申请的可以理解为“对象”,new 时会调用构造函数,返回指向该对象的指针。

       c.对于class类型,必须用new/delete来创建和销毁,自动调用构造和析构函数,malloc/free无法胜任。

    2.使用new遵循原则:

       a.用new申请的内存,必须用delete释放。

       b.用new[]申请的内存,必须用delete[]释放。

       c.delete释放内存后,指针值不变,良好的风格是释放后指针置为NULL,如,delete p; p = NULL。

    使用

    1.申请一个对象

    	int* p1 = new int;
    	delete p1;
    	p1 = NULL;

    2.申请多个对象

    	int* p1 = new int[12];
    	delete[] p1;
    	p1 = NULL;

    3.申请一个长度为1024的char数组

    	char* pArray = new char[1024];
    	for (int i=0; i < 1024; i++)
    	{
    		pArray[i] = i;
    	}
    	delete[] pArray;
    	pArray = NULL;

    4.申请一个类对象

    #include <stdio.h>
    
    class Student
    {
    public:
    	char name[32];
    	int  age;
    };
    int main()
    {
    	Student* pStu = new Student();
    	delete pStu;
    	pStu = NULL;
    	return 1;
    }

    5.申请1024个类对象

    #include <stdio.h>
    
    class Student
    {
    public:
    	int age;
    	Student()
    	{
    		...
    	}
    	~Student()
    	{
    		...
    	}
    };
    
    int main()
    {
    	Student* pStu = new Student[1024];
    	for (int i=0; i<1024; i++)
    	{
    		pStu[i].age = i+1;
    	}
    	delete[] pStu;
    	pStu = NULL;
    	return 1;
    }

    new多个对象不能传参数,要求该类必须有默认构造函数。

    欢迎加群交流:C/C++开发交流

  • 相关阅读:
    pl/sql可以封装代码的结构(过程,函数, 包)
    pl/sql 块结构
    Oracle 逻辑模型(数据库,用户的关系)
    Oracle 创建用户为什么要加C##
    CentOS8断电后无法正常启动
    Cannot open /var/log/sa/sa26: No such file or directory
    Centos6.6安装sysstat报错/etc/cron.d
    Oracle DBCA工具检测不到ASM磁盘组
    Redis安装
    Mysql模拟故障恢复案例过程
  • 原文地址:https://www.cnblogs.com/woniu201/p/11694618.html
Copyright © 2020-2023  润新知