类和对象(9)—— new和delete
对象动态建立和释放 new 和delete
在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。
new和delete是运算符,不是函数,因此执行效率高。
虽然为了与C语言兼容,C++仍保留malloc和free函数,但建议用户不用malloc和free函数,而用new和delete运算符。
new int;//开辟了一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)
new int();//开辟一个存放整数的空间,并指定该整数的初值为100,返回一个指向该存储空间的地址
new char[];//开辟一个存放字符数组(包括10个元素)的空间,返回首元素的地址
new int[][];//开辟一个存放二维整型数组(大小为5*4)的空间,返回首元素的地址
float *p = new float(3.14158);//开辟一个存放单精度数的空间,并指定该实数的初值为3.14158,将返回该空间的地址赋给指针变量p
new运算符动态分配堆内存
使用形式:指针变量=new 类型(常量);
指针变量=new 类型[表达式];
作用:从堆分配一块“类型”大小的存储空间,返回首地址
其中:“常量”是初始化值,可缺省
创建数组对象时,不能为对象指定初始化值
delete运算符释放已分配的内存空间
使用形式:delete 指针变量;
delete[] 指针变量;
其中:“指针变量”必须是一个new返回的指针
用new分配数组空间时不能指定初值。如果由于内存不足等原因而无法正常分配空间,则new会返回一个空指针NULL,用户可以根据该指针的值判断分配空间是否成功。
malloc不会调用类的构造函数,而new会调用类的构造函数;
free不会调用类的析构函数,而delete会调用类的析构函数。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std; //C语言中
void test1()
{
int *p = (int*)malloc(sizeof(int));
*p = ;
if (p != NULL);
{
free(p);
p = NULL;
} int *array_p = (int*)malloc(sizeof(int) * );//数组 for (int i = ; i < ; i++)
{
array_p[i] = i + ;
}
for (int i = ; i < ; i++)
{
printf("%d ", array_p[i]);
}
printf("\n ");
} //C++语言中
void test2()
{
int *p = new int;
*p = ;
if (p != NULL)
{
delete p;
p = NULL;
} int *array_p = new int[for (int i = ; i < ; i++)
{
array_p[i] = i + ;
}
for (int i = ; i < ; i++)
{
cout << array_p[i] << " " ;
}
cout << endl; if (array_p!= NULL)
{
delete[] array_p;
}
} int main(void)
{
test1();
cout << "-----------------------" << endl; test2(); return ;
}
类和对象(9)—— new和delete的更多相关文章
- 不可或缺 Windows Native (17) - C++: 类与对象
[源码下载] 不可或缺 Windows Native (17) - C++: 类与对象 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 类与对象 示例1.类的设计CppE ...
- c++中的类的对象与类的指针
以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...
- Javascript基础--类与对象(五)
js面向(基于)对象编程1.澄清概念 1.1 js中基于对象 == js 面向对象 1.2 js中没有类class,但是它取了一个新的名字,交原型对象,因此 类 = 原型对象. 2.为什么需要对象? ...
- C++中的类和对象(二)
一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内 ...
- 04737_C++程序设计_第4章_类和对象
例4.1 描述点的Point类. 例4.2 根据上面对Point类的定义,演示使用Point类的对象. #define _SCL_SECURE_NO_WARNINGS #include <ios ...
- C++_基础_类和对象3
内容: (1)析构函数 (2)拷贝构造和拷贝赋值 (3)静态成员 (4)成员指针 (5)输入输出运算符重载 1.析构函数 当一个对象被创建时,自动调用构造函数进行初始化 当一个对象被销毁时,自动调用析 ...
- C++_基础_类和对象
内容: (1)引用 (2)类型转换 (3)C++社区给C程序员的建议 (4)面向对象编程的概念 (5)类和对象 (6)构造函数 (7)初始化列表及其必要性 1.引用1.1 指针和引用的使用说明(1)指 ...
- Javascript学习6 - 类、对象、继承
原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...
- C++学习日记(一)————类与对象
C++远征之封装篇(上)笔记 所有内容都是听课笔记,愿课堂视频如下: C++远征之封装篇(上)-慕课网http://www.imooc.com/learn/382 类和对象 1 什么是类,什么是对象 ...
随机推荐
- Java字段初始化规律:
Java字段初始化规律: Java进行初始化的地方有两个,初始化块和构造函数,其中初始化块又分为静态初始化块和实例初始化块(以上程序为实例初始化块).静态初始化块是类中由static修饰的初始化块,实 ...
- UI控件之UIScrollView
UIScrollView:提供了滚动功能,用来显示超过一屏的视图 创建滚动视图 UIScrollView *scrollView=[[UIScrollView alloc]initWithFrame: ...
- redis 数据导入导出,实例内db迁移
源实例db0迁移至目标实例db1 [root@172.20.0.1 ~]# cat redis_mv.sh #!/bin/bash redis-cli -h -a password -n keys & ...
- windows10添加电源计划修改的快捷方案
转自:http://news.mydrivers.com/1/431/431346.htm 由于目前的Windows 10预览版在UI方面还未优化到位,所以某些设置选项要想找出来是很难的,这时候如果能 ...
- win7 加载 usb3.0驱动
1.去微软官网下一个 usb3.0 驱动 https://downloadcenter.intel.com/zh-cn/download/26254/-NUC-NUC6i7kyk-USB3-0-Win ...
- SSM mapper.xml
MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大约 ...
- 最短路径Dijkstra模板
算法思想:把所有的边分成两个集合A,B.集合A表示已经求出最短路径的点,不断扩展集合A,减少集合B.每一扩展就从结合B中找出到源点距离最短的点,加入到A. dis[i]数组代表从出发点到j的距离: m ...
- CocoaPods安装使用
$ gem sources --remove https://rubygems.org/ //等有反应之后再敲入以下命令 $ gem sources -a http://ruby.taobao.org ...
- 剑指Offer——链表中倒数第k个节点
Question 输入一个链表,输出该链表中倒数第k个结点. Solution 一种想法就是扫描两边,第一遍求出总的节点个数,第二遍从头开始走n-k个 第二种思想类似于fast-slow指针的方法,f ...
- 搭建confluence参考文献
https://www.cnblogs.com/kevingrace/p/7607442.html https://yq.aliyun.com/articles/144747?t=t1 jira: h ...