• 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来释放。"
  • 相关阅读:
    String.Format( )用法
    Androidstudio中添加jar包的方法
    Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good
    aravel 之父 Taylor Otwell :我是如何工作的
    【码云周刊第 22 期】GO :互联网时代的 C 语言!
    2017 JavaScript 开发者的学习图谱
    【码云周刊第 29 期】构建高性能微服务架构
    SOA和微服务
    NET Core Web 应用部署到 Docker 中运行
    Expression Trees
  • 原文地址:https://www.cnblogs.com/ciyeer/p/8888654.html
Copyright © 2020-2023  润新知