情人节new一个对象给你

简介: 情人节new一个对象给你

今天情人节,有没对象的吗?假设你不知道new怎么用,每个人都有两种身份,一种没对象的人,这个时候new一个对象给你,一种是有对象的人,这个delete对象。等你学完这个new和delete知识点,无论何时何地,你都能new或者delete一个对象。


一.关于new与delete


new和malloc一样,就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。new开辟空间和普通变量开辟空间不同,比如为普通变量开辟的内存(在栈区),在函数体里面使用完之后就会立即被操作系统释放,而new开辟的内存(在堆区)在函数结束的时候必须由程序员手动释放,如果这块内存不用了,用delete运算符释放它


二.使用堆区的内存有四个步骤:


1)声明一个指针;


2)用new运算符向系统申请一块内存,让指针指向这块内存;


3)通过对指针解引用的方法,像使用变量一样使用这块内存;


4)如果这块内存不用了,用delete运算符释放它。


注意: 如果申请成功,返回一个地址;如果申请失败,返回一个空地址;


释放内存的语法:delete 地址;


释放内存不会失败(还钱不会失败)。


三.申请内存的语法:


  • new 数据类型
  • new 数据类型(初始值)
  • new 数据类型[常量表达式]


四.示例:

  int  * p1=new int;//new一个整形对象
  int* p2 = new int(2); // *p2初始化值是2,这样直接在定义后面初始化是可以的
    cout << "*p=" << *p << endl;
    *p = 8;//解引用修改p所直指向的值也是可以的
    cout << "*p=" << *p << endl;
    delete p;
 //如果不想使用指针,可以定义一个变量,在new之前用“*”表示new出来的内容
  int q = *new int;
  q = 1;
  cout << q << endl;
  int  *p3=new int[1000] //申请1000个单位内存空间
  int* example2()
{
  //当new一个数组时,同样用一个指针接住数组的首地址
  int *q = new int[3];
  for(int i=0; i<3; i++)
    q[i] = i;
  return q;
}
struct student
{
  string name;
  int score;
};
student* stu()
{
  //这里是用一个结构体指针接住结构体数组的首地址
  //对于结构体指针,个人认为目前这种赋值方法比较方便
  student *stud = new student[3]{{"张三", 100}, {"李四", 100}, {"王五", 100}};
  return stud;
}


注意:


  • 动态分配出来的内存没有变量名,只能通过指向它的指针来操作内存中的数据。
  • 如果动态分配的内存不用了,必须用delete释放它,否则有可能用尽系统的内存。
  • 动态分配的内存生命周期与程序相同,程序退出时,如果没有释放,系统将自动回收。
  • 就算指针的作用域已失效,所指向的内存也不会释放。
  • 用指针跟踪已分配的内存时,不能跟丢。
相关文章
|
4月前
|
API Python
利用openvino模型推理图片
本文介绍了如何使用 OpenVINO 格式模型文件对图片进行推理。通过将训练好的模型转换为 OpenVINO 格式,可实现跨设备部署。文中详细展示了利用 Python 和 OpenVINO API 完成模型加载、编译及推理的步骤。核心代码包括初始化 OpenVINO 模型、设置预测参数(如置信度和 IoU 阈值)以及对图片进行检测并显示结果。注意:OpenVINO 模型文件需完整存放于同一目录下,路径需正确配置,参数可根据模型性能调整。
|
机器学习/深度学习 人工智能 自然语言处理
|
12月前
|
Rust 编译器 C++
使用 def、cdef、cpdef 创建函数
使用 def、cdef、cpdef 创建函数
228 0
|
12月前
|
存储 Python
Cython 中的类型转换
Cython 中的类型转换
158 0
|
12月前
|
C语言 C++ Python
在 Cython 中声明结构体、共同体、枚举
在 Cython 中声明结构体、共同体、枚举
161 0
|
11月前
|
存储 安全 编译器
在 Cython 中处理 C 字符串
在 Cython 中处理 C 字符串
83 0
|
12月前
|
存储 XML 算法
Cython 的宏定义
Cython 的宏定义
109 0
|
12月前
|
编译器 API C++
预定义的 .pxd 文件
预定义的 .pxd 文件
116 0
|
12月前
|
存储 API 调度
Cython 的扩展类
Cython 的扩展类
91 0
|
存储 大数据 分布式数据库
一句话说清分布式锁,进程锁,线程锁
在分布式集群系统的开发中,线程锁往往并不能支持全部场景的使用,必须引入新的技术方案分布式锁。 线程锁,进程锁,分布式锁 线程锁:大家都不陌生,主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时,那么在同一时刻至多仅有有一个线程在执行该段代码。
1571 0