zoukankan      html  css  js  c++  java
  • C++基础学习7:new/delete操作符

    在C语言中,动态分配和释放内存的函数是malloc、calloc和free,而在C++语言中,newnew[]、delete和delete[]操作符通常会被用来动态地分配内存和释放内存。
    
    需要注意的是new、new[]、delete和delete[]是操作符,而非函数;new和delete也是C++的关键字。
    
    操作符new用于动态分配单个空间,而new[]则是用于动态分配一个数组,操作符delete用于释放由new分配的空间,
    delete[]则用于释放new[]分配的一个数组。
    
    "new 数据类型" 即为new关键字的基本语法,可以动态的分配一个数据类型大小的空间。例如: 
    int *p = new int;
    为p指针分配了一个int型的空间。new操作符根据请求分配的数据类型来推断所需的空间大小。
    
    new[] 则是为了分配一个数组的空间。具体语法如: 
    int *A = new int[10];
    该语句为A指针分配了一个数组的空间,该数组有10个int数组成员,如果分配成功,则p指针指向首地址,
    并且数组10个成员的地址是连续的,其地址分别为A、A+1、A+2、……、A+9。
    
    delete操作符则专门用于释放由new分配的动态存储空间,在前面我们为p分配了一个int型的空间,我们可以按照如下的方式释放它: 
        delete p;
        delete[] 则用于释放掉由new[]分配的数组空间,在前面我们为A指针分配了十个int单元,构成了一个数组,可以按照如下方式释放掉该空间: 
        delete[] p;
        为了避免内存泄露,通常new和delete、new[]和delete[]操作符应该成对出现,并且不要将这些操作符与C语言中动态分配内存和释放内存的几个函数一起混用。建议在编写C++程序时尽量使用new、new[]、delete和delete[]操作符进行动态内存分配和释放,而不要使用C语言中内存分配和释放的函数,这是因为new、new[]、delete和delete[]操作符可以使用C++的一些特性,如类的构造函数和析构函数,能够更好地管理C++程序的内存。
        
        堆是操作系统维护的一块内存,而自由存储是C++中通过new与delete动态分配和释放对象的抽象概念。堆与自由存储区并不等价。
        "在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区""malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放。"
  • 相关阅读:
    硬盘分区、格式化及文件系统的管理一
    系统监控
    系统的初始化和服务
    正文处理命令及tar命令
    Salesforce: getContentAsPDF()在lightning mode下报错
    Salesforce: 无法在trigger中取到Country或State的更新
    Salesforce: Safe Navigation Operator
    Salesforce: INVALID_QUERY_LOCATOR简析
    Salesforce: Trigger使用注意事项
    Salesforce: 设置用户默认访问Lightning Mode
  • 原文地址:https://www.cnblogs.com/ciyeer/p/8888654.html
Copyright © 2011-2022 走看看