C++(1) 指针 new 和delete
1.概念
new //typeName * pointer_name = new typeName;
delete //delete pointer_name;
注意:
(1)new之后要判断,指针是否为NULL,内存被耗尽时,防止程序超界、
(2)如果用变量分配的内存,则不能使用delete
int a = 5;
int * p = &a;
delete p; //ERROR!!
(3)尽量不要创建两个指针指向同一内存块,可能对此内存块删除两次。
但对于返回指针的函数,使用是有道理的。(道理在哪??)
2.动态数组
(1) 静态联编:通过声明来创建数组--编译时为其分配内存空间,编写程序时,确定数组长度;
动态联编:通过new分配空间--运行时确定数组的长度
(2) int * pt = new int[10];
pt[0] = 1; //可以使用数组的方式赋值
pt[1] = 2;
pt[3] = 3;
pt = pt +1; //此时pt[0] = 2; pt[1] = 3;
//相邻的int地址相差2个或者4个字节,但将pt +1 后指向的是下一个元素的地址
pt = pt -1; //指针变量指向原来的值,给后面的delete [] 提供正确的地址
delete [] pt; //delete 注意:a.与new或new [] 配对使用
b.不能使用delete释放同一块内存两次,造成不确定
c.对空指针使用delete安全,但作用是??(不理解)
d.使用new[]为一个实体分配内存,则应使用delete(没有括号来释放)。
(书上看到的,不理解实体分配是什么情况?为什么没有括号?)
C++(1) 指针 new 和delete相关推荐
- ##关于用vector存取指针及相关delete问题(用序偶对解决0-1背包)
仅以此篇博客来纪念本菜鸟的一次"成长" 关于用vector存取指针及相关delete问题(用序偶对解决0-1背包) 我在选用序偶对解决0-1背包时,选取的结构是vector,用ve ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- 4.如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
容器很聪明,能够做很多事情.容器析构时,会调用元素的析构函数.但是,如果是元素为指针,会出现内存泄漏. ... std::vector<Widget*> datas; for (int i ...
- c++重载运算符_C/C++编程笔记:运算符重载丨重载C++中的New和Delete运算符
new和delete运算符也可以像C ++中的其他运算符一样重载.New和Delete运算符可以全局重载,也可以在特定类中重载. (1)如果使用某个类的成员函数来重载这些运算符,则意味着这些运算符仅针 ...
- 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释
1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...
- 关于c++类中的指针成员问题
C++类中指针成员的管理: 有三种解决方案: 1.全部用值类型指针: 优点:可以很安全而且简单. 缺点:占用大量的内存,并且内存CPY运算量巨大. 方法:写如下几个函数: 复制构造函数. 析构函数. ...
- C++中智能指针的设计和使用
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露.它的一种通用实现技术是使用引用计数(reference ...
- C++智能指针(设计和使用)
前段时间学习project Anarchy引擎,底层很多都是用的只能指针,学了之后一直没用过的,到现在终于算是见到实际作用了,现在重新温故下 智能指针(smart pointer)是存储指向动态分配( ...
- C++ new delete操作符
//new delete操作符 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;/* 1.ne ...
最新文章
- Python案例:使用BeautifuSoup4的爬虫
- 微软职位内部推荐-Senior SDE for Cloud Platform
- mysql更新日志问题
- 10 个小技巧:快速用 Python 进行数据分析
- 阿里云朱照远:AI打开新视界 8K时代已来!
- Dockerfile 指令详解2
- 64位Outlook 无法与OC集成
- C# 图片画矩形,添加文字
- Spring Data JPA 从入门到精通~如何配置多数据源
- 中蜂几月份自然分蜂_蜜蜂的种类:北黑蜂,中华蜜蜂,皖南中蜂,贵州纳雍中蜂等等...
- c语言深度解剖 pdf,c语言深度解剖(解密).pdf.pdf
- C++STL之整理算法
- Ubuntu18.04下的模拟神器RetroArch
- 分享软件测试计划模板
- 语音通知事件提醒功能实现流程
- centos7 安装pg_repack
- (转)Linux——pv、vg和lv的概念
- 关于Wasserstein GAN的理解
- 基于Yocto的qmake编译环境默认QMAKE_SPEC不是linux-oe-g++的问题
- 互联网大厂技术岗实习/求职经验分享(实习内推+简历+面试+offer)
热门文章
- 计算机网络技术超文本,网络协议确定了计算机网络传递和管理信息的规范,其中HTTP属于()A、超文本传输协议B、传输控制协...
- Linux结构体变量报错,23. Linux模式设计
- filter执行先后问题_filter的执行顺序是怎样的?
- 用博奥如何导入单项工程电子表_博奥工程系列软件实操手册(第六册).doc
- qemu 安装windows_BIOS+MBR启动引导安装双系统
- 是不是一个东西_迷你世界:一个金币就能买到稀有武器?这么良心的售货机在哪领...
- job sql 定时执行exe_SQL Server定时作业job的设置方法(转)
- enspac启动失败代码2_电脑蓝屏代码0x000024
- 怎么增加android模拟器内存卡,增加android模拟器的内存大小
- mchain r语言_【揭秘】Mchain是长久稳定的项目吗?是不是骗钱的平台?做的人有多少?...