// DeleteAndDelete[].cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
/*
delete ptr 只用来释放ptr指向的内存。
delete[] ptr 用来释放rg指向的内存,并且逐一调用数组中每个对象的析构函数 所以对于像int/char/long/int/struct基本数据类型,由于他们没有析构函数,所以用delete 和delete[]都能够安全地释放内存,并没有区别。
但是如果是C++对象数组就不同了,对于对象数组使用delete释放,只能够调用一次析构函数,程序崩溃
对于对象数组使用delete[]释放,则会调用数组大小对应的析构函数,内存安全双方(Sub_5验证)
*/ void Sub_1();
void Sub_2(); void Sub_3();
void Sub_4(); void Sub_5(); class TestClassA
{
private:
char *m_cBuffer;
int m_nLen = 1;
public:
TestClassA() { m_cBuffer = new char[m_nLen]; }
~TestClassA() { delete[] m_cBuffer; }
}; class TestClassB
{
public:
TestClassB()
{
cout << "构造函数哈构造函数" << endl;
}
~TestClassB()
{
cout << "析构函数哈析构函数被调用了几次呢?" << endl;
}
}; int main()
{
/*基本数据类型的delete 和 delete[],没有区别,都能安全释放*/
//Sub_1();
//Sub_2();
//Sub_3();
//Sub_4();
Sub_5();
return 0;
} void Sub_1()
{
int *v1 = new int[10];
delete v1;
} void Sub_2()
{
int *v1 = new int[10];
delete[] v1;
} //内存泄漏!崩溃
void Sub_3()
{
TestClassA *v1 = new TestClassA[10];
delete v1;
//仅释放了a指针指向的全部内存空间 但是只调用了a[0]对象的析构函数
//剩下的从a[1]到a[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 从而造成内存泄漏
} void Sub_4()
{
TestClassA *v1 = new TestClassA[10];
delete[] v1;
//仅释放了a指针指向的全部内存空间 但是只调用了a[0]对象的析构函数
//剩下的从a[1]到a[9]这9个用户自行分配的m_cBuffer对应内存空间将不能释放 从而造成内存泄漏
} void Sub_5()
{
//TestClassB* v1 = new TestClassB[3];
//delete v1; //只调用一次析构函数,崩溃
TestClassB* v2 = new TestClassB[3];
delete[] v2; //正确使用,调用了三次析构函数
}

  

delete和delete[] 区别的更多相关文章

  1. sql之truncate 、delete与drop区别

    sql之truncate .delete与drop区别相同点:truncate 和不带 where 子句的 delete,以及 drop 一定会删除表内的数据不同点:1. truncate 和 del ...

  2. 【转】 C++中delete和delete[]的区别

    一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...

  3. sql中truncate 、delete与drop区别

    SQL truncate .delete与drop区别   相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL ...

  4. C++ 中 delete 和 delete[] 的区别

    一直对 C++ 中 delete 和 delete[] 的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++ 告诉我们在回收用 new 分配的单个对象的内存空间时用 de ...

  5. SQL truncate 、delete与drop区别

    SQL truncate .delete与drop区别 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句 ...

  6. delete与delete[]的区别

    一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...

  7. new malloc和delete free 的区别

    今天看了一个面试题:问new 和 malloc, delete 和 free 的区别,扭捏了半天,也没说完全:现总结如下: 1.先看看new 和 delete 看一个例子: <span styl ...

  8. delete和delete[]的区别(转载)

    一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...

  9. new和malloc区别,delete和delete []区别

    面试被问到上述问题,所以特地总结一下: 一.new和malloc的区别. 1.new可以返回指定类型的指针,并且自动分配内存大小:malloc需要计算手动计算分配空间的大小,并且返回值需要强转为实际类 ...

  10. delete 和 delete [] 的真正区别

    c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 de ...

随机推荐

  1. Hypergeometric distribution

    How TermFinder calculates P-values Readme: MGI GO Term Finder The GoTermFinder attempts to determine ...

  2. 最简单的网络图片的爬取 --Pyhon网络爬虫与信息获取

    1.本次要爬取的图片的url http://www.nxl123.cn/static/imgs/php.jpg 2.代码部分 import requestsimport osurl = "h ...

  3. JavaScript Transpilers: 为什么需要用它们?Babel的使用介绍。

    英文原文 https://scotch.io/tutorials/javascript-transpilers-what-they-are-why-we-need-them 摘译(文章内的代码有些过期 ...

  4. Agile敏捷开发Planning Poker简介

    ​​关注嘉为科技,获取运维新知 一.为什么不用“人天”? 传统的IT项目,尤其是软件开发项目,往往使用“人天”来作为工作量评估的量词.甚至是代表一种评估方式.在软件项目开发经典著作<人月神话&g ...

  5. Web版记账本开发记录(一)

    //index.js var util = require("../../utils/util.js"); //获取应用实例 var app = getApp(); Page({ ...

  6. CF1114E Arithmetic Progression

    给定一个打乱的等差数列,每次两种操作. 1.查询一个位置. 2.查询是否有比x大的数字. 一共60次操作. sol: 30次操作即可二分出首项. 剩下30次操作查询出30个位置然后两两做差取gcd即可 ...

  7. climbing stairs leetcode java

    问题描述: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either ...

  8. Single Number leetcode java

    问题描述: Given an array of integers, every element appears twice except for one. Find that single one. ...

  9. 『计算机视觉』经典RCNN_其二:Faster-RCNN

    项目源码 一.Faster-RCNN简介 『cs231n』Faster_RCNN 『计算机视觉』Faster-RCNN学习_其一:目标检测及RCNN谱系 一篇讲的非常明白的文章:一文读懂Faster ...

  10. 使用org.apache.poi导出Excel表格

    public HSSFWorkbook MakeExcel(List<TransactionLogVO> logList) { // SimpleDateFormat sdf = new ...