delete和delete[] 区别
// 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[] 区别的更多相关文章
- sql之truncate 、delete与drop区别
sql之truncate .delete与drop区别相同点:truncate 和不带 where 子句的 delete,以及 drop 一定会删除表内的数据不同点:1. truncate 和 del ...
- 【转】 C++中delete和delete[]的区别
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...
- sql中truncate 、delete与drop区别
SQL truncate .delete与drop区别 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL ...
- C++ 中 delete 和 delete[] 的区别
一直对 C++ 中 delete 和 delete[] 的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++ 告诉我们在回收用 new 分配的单个对象的内存空间时用 de ...
- SQL truncate 、delete与drop区别
SQL truncate .delete与drop区别 相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句 ...
- delete与delete[]的区别
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...
- new malloc和delete free 的区别
今天看了一个面试题:问new 和 malloc, delete 和 free 的区别,扭捏了半天,也没说完全:现总结如下: 1.先看看new 和 delete 看一个例子: <span styl ...
- delete和delete[]的区别(转载)
一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...
- new和malloc区别,delete和delete []区别
面试被问到上述问题,所以特地总结一下: 一.new和malloc的区别. 1.new可以返回指定类型的指针,并且自动分配内存大小:malloc需要计算手动计算分配空间的大小,并且返回值需要强转为实际类 ...
- delete 和 delete [] 的真正区别
c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 de ...
随机推荐
- Ubuntu16.04安装8821CE 无线网卡无驱动
已解决 参考链接:https://unix.stackexchange.com/question ... -mint-18-2 内容 Worked solution (Requirements: ke ...
- Lasso linear model实例 | Proliferation index | 评估单细胞的增殖指数
背景:We developed a cell-cycle scoring approach that uses expression data to compute an index for ever ...
- C# winform 窗体怎么隐藏标题栏,不显示标题栏
//没有标题 this.FormBorderStyle = FormBorderStyle.None; //任务栏不显示 this.S ...
- Mac OS下安装和配置MongoDB
安装和配置教程: 参考地址:https://blog.csdn.net/yibowanbo/article/details/80233030 可视化管理工具: 地址:https://blog.csdn ...
- 为什么样本方差除以(n-1)而不是n ?(自由度)
不记得第几次看见样本方差的公式,突然好奇为什么要除以(n-1)而不是n呢?看见一篇文章从定义上和无偏估计推导上讲的很清楚https://blog.csdn.net/fuming2021118535/a ...
- upsource初探
在JetBrains 的官网上,看到codereview的工具 upsource ,https://www.jetbrains.com/upsource/ 官方的英文文档 来看下博客园上有博主简单的 ...
- git相关知识(github,idea等的配置)
本地git提交文件到github上: 1.在github上创建项目 2.使用git clone https://github.com/xxxxxxx/xxxxx.git克隆到本地 3.编辑项目 4.g ...
- 基数排序模板[luogu 1177]
#include<bits/stdc++.h> #define LL long long using namespace std; ,bas=; ]; LL idx(LL k,LL w) ...
- C++ string::size_type
从逻辑上讲,size()成员函数应该似乎返回整型数值,但事实上,size操作返回是string::size_type类型的值.string类类型和其他许多库类型都定义了一些配套类型(companion ...
- Python print打印
1.Python运算符: +:加 -:减 *:乘 /:除以 %:去除法后的余数 //:取整除 2.字符串center方法: a='111'print(a.center(4,'2')) #让字符串占位 ...