对象动态建立和释放 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. json学习笔记--在JavaScript中的使用

    1.字符串转换为JavaScript对象 var jsonStr = '[' + '{"name":"陶国荣","sex":"男& ...

  2. SpringBoot整合Redis集群

    一.环境搭建 Redis集群环境搭建:https://www.cnblogs.com/zwcry/p/9174233.html 二.Spring整合Redis集群 1.pom.xml <proj ...

  3. 【leetcode刷题笔记】Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  4. Python编程-函数进阶二

    一.生成器补充 1.什么是生成器? 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2.生成器分类 (1) ...

  5. hadoop程序在本地模式调试作业

    1.首先下载cygwin,例如安装在该目录下,D:\Program Files\cygwin\ 2.copy linux上的jar包到D:\Program Files\cygwin\home\lib ...

  6. 20145240 《Java程序设计》第五周学习总结

    20145240 <Java程序设计>第五周学习总结 教材学习内容总结 语法与继承结构 8.1.1使用try.catch java中所有的错误都会被打包为对象,并提供了特有的语句进行处理. ...

  7. iOS_SDWebImage框架分析

    SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.使用SDWebImage首先了解它加载图片的流程. 入口 setIma ...

  8. 文件系统的特性,linux的EXT2文件系统【转】

    本文转载自:https://blog.csdn.net/tongyijia/article/details/52809281 先来提出三个概念: - superblock - inode - bloc ...

  9. 定时任务 Linux cron job 初步使用

     查看定时任务的命令为:crontab -l   编辑定时任务的命令为:crontab -e   (编辑后立即生效 若注释可在行首加#  同vi)         定时任务说明       每一行为一 ...

  10. 0x5C 计数类DP

    cf 559C 考虑到黑色的格子很少,那么我把(1,1)变成黑色,然后按每个黑色格子接近终点的程度排序,计算黑色格子不经过另一个黑色格子到达终点的方案,对于当前的格子,要减去在它右下角的所有方案数(注 ...