对象动态建立和释放 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的更多相关文章

  1. 不可或缺 Windows Native (17) - C++: 类与对象

    [源码下载] 不可或缺 Windows Native (17) - C++: 类与对象 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 类与对象 示例1.类的设计CppE ...

  2. c++中的类的对象与类的指针

    以上内容来自:http://wenku.baidu.com/link?url=haeRBhswlEcqddk48uW8YVMsdFNWsllimn_dzUYchb6G9NdT4pqgluCpnLQId ...

  3. Javascript基础--类与对象(五)

    js面向(基于)对象编程1.澄清概念 1.1 js中基于对象 == js 面向对象 1.2 js中没有类class,但是它取了一个新的名字,交原型对象,因此 类 = 原型对象. 2.为什么需要对象? ...

  4. C++中的类和对象(二)

    一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内 ...

  5. 04737_C++程序设计_第4章_类和对象

    例4.1 描述点的Point类. 例4.2 根据上面对Point类的定义,演示使用Point类的对象. #define _SCL_SECURE_NO_WARNINGS #include <ios ...

  6. C++_基础_类和对象3

    内容: (1)析构函数 (2)拷贝构造和拷贝赋值 (3)静态成员 (4)成员指针 (5)输入输出运算符重载 1.析构函数 当一个对象被创建时,自动调用构造函数进行初始化 当一个对象被销毁时,自动调用析 ...

  7. C++_基础_类和对象

    内容: (1)引用 (2)类型转换 (3)C++社区给C程序员的建议 (4)面向对象编程的概念 (5)类和对象 (6)构造函数 (7)初始化列表及其必要性 1.引用1.1 指针和引用的使用说明(1)指 ...

  8. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

  9. C++学习日记(一)————类与对象

     C++远征之封装篇(上)笔记 所有内容都是听课笔记,愿课堂视频如下: C++远征之封装篇(上)-慕课网http://www.imooc.com/learn/382 类和对象 1 什么是类,什么是对象 ...

随机推荐

  1. springboot-vue项目前台2

    api_account.js import * as API from './' export default { //登录 login: params => { return API.POST ...

  2. python安装包

    1. python常用包下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy numpy包下载地址:https://pypi.python.org ...

  3. ubuntu中如何添加IP

    编辑网卡配置文件vi /etc/network/interfaces 在配置文件下增加新的IP配置 之后重启网络/etc/init.d/networking restart

  4. Myeclipse中Tomcat的两种部署方式

    一.在Myeclipse软件中部署 1. 在Myeclipse中,创建好工程后,在Myeclipse菜单栏中选择 Windows -> Preferences -> Myeclipse - ...

  5. Spring之rmi实例演示

    环境介绍:本文中服务端客户端使用的都是ssm框架,配置文件分为spring_servlet.xml,spring_service.xml,mybatis.xml 在spring里面使用rmi完成远程调 ...

  6. 生成 (web): 找不到目标 .NET Framework 版本的引用程序集;请确保已安装这些程序集或选择有效的目标版本。

    刚刚还好好的,不知道修改什么了,突然出现如下错误: Default.aspx(36): 生成 (web): 找不到目标 .NET Framework 版本的引用程序集:请确保已安装这些程序集或选择有效 ...

  7. java基础11(IO流)-字符流

    转换流 由于字节流操作中文不是特别方便,所以java中提供了转换流 编码表:由现实世界的字符和对应的数值组成的一张表 编码:把看得懂的变成看不懂的(String-------byte[]) 解码:把看 ...

  8. Spark-运行时架构

    Spark运行时架构 在分布式环境下,Spark集群采用的时主/从结构.在一个Spark集群中,有一个节点负责中央协调,调度各个分布式工作节点.这个中央协调节点被称为驱动器(Driver),与之对应的 ...

  9. QT 创建对话框 Dialog 实例

    1. 2. dialog.h 头文件 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE cla ...

  10. Haproxy与OpenStack-API安全

    转 http://wsfdl.com/devops/2014/12/24/Haproxy%E4%B8%8EOpenStack-API%E5%AE%89%E5%85%A8.html Haproxy 作为 ...