使用new和delete
程序员文章站
2022-06-21 12:27:14
...
一、基础知识
变量是编译时分配内存的有名称的内存。
而指针只是为可以通过名称直接访问的内存提供了一个别名。指针的真正用武之地在于在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。
首先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时要遵循的规则
- 如果在new表达式中使用了[],必须在相应的delete表达式中使用[]。如果在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。确保“同时使用、相同形式”。
- 不要使用delete释放不是new分配的内存。
- 不要使用delete释放同一个内存两次。
- 使用new[]为数组分配的内存一定要使用delete[]释放,不能使用delete;new为单个对象分配的内存一定使用delete来释放。
- 对空指针delete是安全的。
上一篇: js判断两个日期大小
下一篇: react hook
推荐阅读
-
php使用gzip压缩传输js和css文件的方法
-
使用iframe作为日历的载体,不再被select和flash等控件挡住的日期输入框
-
MySQL 存储过程和"Cursor"的使用方法
-
Toast和Handler的间隔使用实例
-
中国银行动态口令和动态密码使用图文教程
-
锚文本和超链接的区别,五分钟让你搞懂这两者的使用方法
-
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
-
javascript asp教程第四课 同时使用vbscript和javascript
-
Java开发工具Eclipse使用技巧全局搜索和更替
-
在Django的模型和公用函数中使用惰性翻译对象