一、基础知识

变量是编译时分配内存的有名称的内存。
指针只是为可以通过名称直接访问的内存提供了一个别名。指针的真正用武之地在于在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。

首先new找到一块长度正确的内存块,并返回该内存的地址;
然后程序员的责任是将该内存地址赋值给一个指针。如:
方式一:
int * pn=new int;
delete pn;

方式二:
int higgens;
int * pt=&higgens;
delete pt;

第一种情况下只能通过指针来访问;
第二种情况可以通过higgens来访问该int.


为一个数据对象(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下:

typeName * pointer_name = new typeName ;
...
delete pointer_name ;

二、使用new创建动态数组

int *ps = new int [10];   //创建一个包含10个int 元素的数组。
delete [] ps;    //对于new创建的数组,使用delete [] 来释放。

new运算符返回第一个元旦的地址,改地址被赋值给指针ps.
方括号[]告诉程序,应该释放整个数组,而不仅仅是指针指向的元素。
为数组分配内存的通用格式如下:

typeName * pointer_name = new typeName [num_elements] ;
...
delete [] pointer_name ;

三、使用new和delete时要遵循的规则

  1. 如果在new表达式中使用了[],必须在相应的delete表达式中使用[]。如果在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。确保“同时使用、相同形式”。
  2. 不要使用delete释放不是new分配的内存。
  3. 不要使用delete释放同一个内存两次。
  4. 使用new[]为数组分配的内存一定要使用delete[]释放,不能使用delete;new为单个对象分配的内存一定使用delete来释放。
  5. 对空指针delete是安全的。

使用new和delete相关推荐

  1. Reject: HTTP ‘DELETE‘ is not allowed, Not injecting HSTS.....DELETE请求PUT请求跨域问题

    CORS(DELETE请求.PUT请求) Reject: HTTP 'DELETE' is not allowed [DEBUG] 2021-08-25 15:23:52.401 [http-nio- ...

  2. Git 常用操作(6)- 推送到远程仓库(git push)删除远程分支(git push origin --delete)

    1. git remote add--添加远程仓库 在GitHub 上创建的仓库路径为 "git@github.com:用户名/git-tutorial.git".现在我们用git ...

  3. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  4. C++:随笔6---new\delete\虚方法\抽象方法

    指针是一种专门用来存储内存地址的数据类型.(他存储的不是具体的数据而是别人的地址) 常用做法是:创建一个变量,再把这个变量的地址赋值给一个指针,然后就可以用指针去访问这个变量的值. 事实上在C和C++ ...

  5. C++中的new和delete用法

    //个体 point *p=new point; //point类存在初始化成员函数point(void)的前提下才能这样赋值: delete p;//一维数组,这样赋值的话,p在程序里表示的就不是指 ...

  6. LeetCode刷题记录3——237. Delete Node in a Linked List(easy)

    LeetCode刷题记录3--237. Delete Node in a Linked List(easy) 目录 LeetCode刷题记录3--237. Delete Node in a Linke ...

  7. 在析构函数中delete this指针问题

    思考:在析构函数中delete this指针,运行下面代码会产生什么样的结果呢? #include <iostream> using namespace std; class A{ pub ...

  8. LSM 优化系列(四) -- Rocksdb和Lethe 对Delete问题的优化

    文章目录 前言 1. 问题背景 2. 问题复现 3. Rocksdb 的 Delete-Aware 优化 3.1 可配置的 Delete-Aware调度 3.2 Compaction 逻辑对 dele ...

  9. leetcode 237: Delete Node in a Linked List

    题目: Write a function to delete a node (except the tail) in a singly linked list, given only access t ...

  10. 【C++】C/C++ 中default/delete特性

    C++类的特殊成员函数及default/delete特性 本文内容侧重个人理解,深入理解其原理推荐https://www.geeksforgeeks.org 目录 目录 C++类的特殊成员函数及def ...

最新文章

  1. Hbase数据模型 列族
  2. Vue.js组件中v-model的使用
  3. python3数据类型:Tuple(元组)
  4. 《leetcode》search-insert-position
  5. angular项目打包发布流程
  6. 安卓学习笔记---Activity
  7. sparklines插件_21个实用的Javascript数据图表插件
  8. 【渝粤题库】陕西师范大学200131中国古代文论 作业(专升本)
  9. LeetCode LCP 22. 黑白方格画
  10. IOS控件圆角、描边
  11. gstreamer之RTSP Server test-mp4正确运行代码
  12. 关于Kubernetes规划的灵魂N问
  13. word页眉页脚,奇偶不同
  14. 鸽群优化算法(Pigeon-inspired Optimization algorithm, PIO)附matlab代码
  15. 禅道 upgrade.php,zentao禅道安装升级
  16. Hadoop-HDFS总结(五)
  17. QT简单入门程序——实现可修改用户信息界面
  18. R语言|4. 轻松绘制临床基线表Table 1 临床三线表绘制
  19. 资本并非全部,新家装风口下如何迎风起舞?丨Xtecher 观察
  20. 微服系列之Feign使用HttpClient和OkHttp网络请求框架

热门文章

  1. 在汇编语言调用c语言程序,C/C++调用汇编语言实例:目录表程序
  2. html5标签对js影响,浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
  3. python随机数字字符串_pythonrandom生成随机数和字符串,数字
  4. javaweb——jsp(学习总结,javaweb必备技能)
  5. eplan mysql_EPLAN SQL Server 远程数据库的搭建
  6. redis数据结构-hash
  7. aspmysql发布_ASP如何使用MYSQL数据库
  8. spark算子大全glom_Spark 算子- Value Transformation
  9. 提升专业素养之软件工程概述
  10. vba odbc 3704 mysql_[求助]ado对象调用存储过程运行时错误3704