// 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. Ubuntu16.04安装8821CE 无线网卡无驱动

    已解决 参考链接:https://unix.stackexchange.com/question ... -mint-18-2 内容 Worked solution (Requirements: ke ...

  2. Lasso linear model实例 | Proliferation index | 评估单细胞的增殖指数

    背景:We developed a cell-cycle scoring approach that uses expression data to compute an index for ever ...

  3. C# winform 窗体怎么隐藏标题栏,不显示标题栏

    //没有标题            this.FormBorderStyle = FormBorderStyle.None;            //任务栏不显示            this.S ...

  4. Mac OS下安装和配置MongoDB

    安装和配置教程: 参考地址:https://blog.csdn.net/yibowanbo/article/details/80233030 可视化管理工具: 地址:https://blog.csdn ...

  5. 为什么样本方差除以(n-1)而不是n ?(自由度)

    不记得第几次看见样本方差的公式,突然好奇为什么要除以(n-1)而不是n呢?看见一篇文章从定义上和无偏估计推导上讲的很清楚https://blog.csdn.net/fuming2021118535/a ...

  6. upsource初探

    在JetBrains 的官网上,看到codereview的工具 upsource ,https://www.jetbrains.com/upsource/  官方的英文文档 来看下博客园上有博主简单的 ...

  7. git相关知识(github,idea等的配置)

    本地git提交文件到github上: 1.在github上创建项目 2.使用git clone https://github.com/xxxxxxx/xxxxx.git克隆到本地 3.编辑项目 4.g ...

  8. 基数排序模板[luogu 1177]

    #include<bits/stdc++.h> #define LL long long using namespace std; ,bas=; ]; LL idx(LL k,LL w) ...

  9. C++ string::size_type

    从逻辑上讲,size()成员函数应该似乎返回整型数值,但事实上,size操作返回是string::size_type类型的值.string类类型和其他许多库类型都定义了一些配套类型(companion ...

  10. Python print打印

    1.Python运算符: +:加 -:减 *:乘 /:除以 %:去除法后的余数 //:取整除 2.字符串center方法: a='111'print(a.center(4,'2')) #让字符串占位 ...