首页 > 编程语言 >C++第七节课 new开辟空间 delete释放空间

C++第七节课 new开辟空间 delete释放空间

时间:2024-03-02 22:11:24浏览次数:27  
标签:malloc int C++ 空间 new 开辟 delete

#include <iostream>

using namespace std;
// C中开辟空间的方式  所有的返回值 都是 void *
/// int * p = (int*)malloc(sizeof (int))
/// malloc 在堆上开辟空间并没有进行初始化
///
/// int* pa = (int*)calloc(1,sizeof (int));
/// calloc 在堆上开辟空间是有初始化的
/// 在原来的基础上 pa 再次开辟 10 个空间
///
/// int *pa1  = (int*)realloc(pa,sizeof(int)*10);
/// 原来空间的数据 拷贝一份 (pa)
/// realloc 在堆上开辟空间是有初始化的
/// 释放空间
/// free(p)
/// free(pa)
/// free(pa1)
/// 同一块堆区空间被多次释放会造成 doublefree 的现象,程序会异常终止
///
// C++中开辟空间的方式
/// C++中提供了关键字 new 来动态开辟空间 ,为了释放空间 提供了关键字delete 来释放空间
/// 堆上的空间手动申请,手动释放,不然就是内存泄露
/// 使用 new + 类型 [N] 动态开辟 N 个类型的空间
/// 如果是连续开辟空间要释放使用 delete [] 进行释放
/// 对于内置类型而言 new 相当于是 malloc delete 相当于是 free
/// 内置类型和自定义类型
/// 如果是自定义类型 new 代表两种含义,1. 开辟空间 2. 调用类中的构造函数进行初始化
///               delete 代表2中含义:调用类中的析构函数,释放空间
///
/// new 和 malloc 的联系
/// new 的底层就是使用 malloc 实现的
/// malloc 如果申请空间失败返回 Null
/// new 如果申请空间失败抛出异常 bad_alloc()
/// new 是按照类型开辟空间的 , 而 malloc 是按字节为单位开辟空间的
/// 对自定义的类型来说,new 不仅开辟空间 还会调用自定义类中的构造函数
/// delete 不经释放空间 还会先调用自定义类中的析构函数
int main()
{
    // new  开辟空间的方式是使用new按照类型直接开辟的空间
    // 同时,在内置类型的后面加上 () 表示编译器在括号取值初始化内置类型所开辟的内存中的值
    int *p = new int();

    // 动态连续开辟空间
    int* pb = new int[1024];  // 连续开辟空间并初始化
    int* pc = new int[1024]{1,2,3}; // 开辟空间并赋值 C++11的新语法

    // 使用 delete 释放已经开辟的空间
    delete p;
    delete [] pb;
    delete [] pc;
    cout << "Hello World!" << endl;
    return 0;











}

 

标签:malloc,int,C++,空间,new,开辟,delete
From: https://www.cnblogs.com/zhulongxu/p/18049361

相关文章

  • C++ 输入/输出运算符重载
    C++能够使用流提取运算符>>和流插入运算符<<来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。下面的实例演......
  • 随笔记录篇——C++iostream库 以及std
    这篇文章非原创,来自我学习过程中看到的其他博主发的一些资料,解决了我的疑问,在此进行整理。C语言的标准输入输出库是stdio.h库,是一个函数库,而不是类库。其中包含了我们其中所用的scanfpringf都是一些独立的全局函数,因为C语言是不支持类的。C++的标准输入输出库iostream是一个类......
  • C++ 关系运算符重载
    C++语言支持各种关系运算符(<、>、<=、>=、==等等),它们可用于比较C++内置的数据类型。您可以重载任何一个关系运算符,重载后的关系运算符可用于比较类的对象。1#include<iostream>2usingnamespacestd;3 4classDistance5{6  private:7 ......
  • C++ 一元运算符重载
    一元运算符只对一个操作数进行操作,下面是一元运算符的实例:递增运算符(++)和递减运算符(--)一元减运算符,即负号(-)逻辑非运算符(!)一元运算符通常出现在它们所操作的对象的左边,比如!obj、-obj和++obj,但有时它们也可以作为后缀,比如obj++或obj--。下面的实例演示了如何......
  • C++第六节课 引用变量 指针的升级版
    #include<iostream>usingnamespacestd;//C++的引用是C指针的升级可以提高代码的稳定性和健壮性//const修饰的引用是常引用//函数传参实参向形参进行传递默认是值的传递这个是值的一个副本两个互不影响intadd(constint&a,constint&b){///a++;避......
  • C++ 重载运算符和重载函数 二元运算符重载
    C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型......
  • c++多线程按行读取同一个每行长度不规则文件
    对于非常大的比如上百G的大文件读取,单线程读是非常非常慢的,需要考虑用多线程读,多个线程读同一个文件时不用加锁的,每个线程打开一个独立的文件句柄多线程读同一个文件实现思路思路1先打开一个文件句柄,获取整个文件大小file_size确定要采用线程读取的部分大小read_size和......
  • c++多线程编程
    c++线程库:<thread>创建线程:需要可调用的函数或者函数对象作为线程入口点例:std::threadthreadname(function_name,args...)在C++中,当使用std::thread创建线程并传递类的成员函数时,需要使用&来获取成员函数的地址,同时还需要传递对象的指针(或引用)作为第一个参数。......
  • C++ 继承
    1//基类2classAnimal{3  //eat()函数4  //sleep()函数5};678//派生类9classDog:publicAnimal{10  //bark()函数11};基类&派生类一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我......
  • NEW CONCEPT ENGLISH 11-20
    NEWCONCEPTENGLISH11-20Lesson11 Isthisyourshirt?Keywordsandexpressionswhose pron. 谁的perhaps adv. 大概blue adj. 蓝色的white adj. 白色的catch v. 抓住LanguagepointsWhoseshirtisthat? 那是谁的衬衫?还可以这样说,Whoseisthatshi......