文档章节

[C++ 学习笔记 1] delete 和 delete [] 的本质区别

UMU
 UMU
发布于 2017/01/04 23:25
字数 245
阅读 45
收藏 1

  之前只系统学过 C,自然地了解了一些 C++ 的皮毛(可以认为是 C+),然后就一直用着 C+ 开发,最近看了一些现代 C++ 代码,感觉是时候好好学习 C++ 了……后续会把学习中记的笔记发出来,尽量简短明了。

  当 ptr 指向的是基础类型数组时,delete ptr 和 delete [] ptr 等价。这好比用 free 释放 malloc 分配的内存,malloc 了多少,不必关心,free 知道要释放多长,因为 malloc 会维护这个长度信息。

  当 ptr 指向类对象数组时,两者的差别在于调用多少个析构函数,delete 只调用第一个元素的析构函数,delete [] 则调用所有元素的析构函数。

#include <memory>
#include <iostream>

class Foo
{
public:
    Foo()
    {
        std::cout << __FUNCTION__ << std::endl;
    }

    ~Foo()
    {
        std::cout << __FUNCTION__ << std::endl;
    }
};

int main()
{
    // bug: 只会析构一个元素
    std::shared_ptr<Foo> p(new Foo[10]);

    return 0;
}

 

© 著作权归作者所有

UMU

UMU

粉丝 119
博文 112
码字总数 44043
作品 0
厦门
程序员
私信 提问
malloc和new有什么区别

malloc和new有以下不同: new、delete是操作符,可以重载,只能在c++中使用。 malloc、free是函数,可以覆盖,c、c++中都可以使用。 new可以调用对象的构造函数,对应的delete调用相应的析构...

夏雪冬日
2012/12/11
0
0
C++基础教程之C/C++区别

C/C++基础教程之C/C++区别 这是C++教程得第一步,后续会持续更新哦!欢迎新手(具有C基础),老鸟可绕道,可指导。 C++标准输入和输出 C++标准输入和输出分别是cin和cout,用法非常简单 cin>>n...

这个人很懒什么都没留下
2018/09/01
0
0
delete与 delete []区别

delete[]中的[]是要告诉c++,指向的是一个数组,如果在[]中填上了数组的长度信息,c++编译系统将忽略,并把它作为[]对待。但如果忘记了写[],则程序会产生运行错误。 delete只会调用一次析构...

夏雪冬日
2012/12/11
0
0
c语言基础学习11_项目实战:IDE(集成开发环境)

============================================================================= ============================================================================= 涉及到的知识点有: 一......

黑泽明军
2018/01/29
0
0
new/delete 和 malloc/free有什么区别和联系

区别: 1. new/delete是C++的操作符,malloc/free是C/C++标准库函数。 2. new分为两步的:第一步是申请内存,第二步则是调用构造函数初始化对象。同样,在调用delete的时候,需要先调用析构函...

borey
2014/07/29
265
0

没有更多内容

加载失败,请刷新页面

加载更多

还为PDF转Word抓狂?以下神器让你在职场倍受欢迎!

身在职场的你,是否一直在琢磨:如何能让自己在公司更受欢迎?如何才能在办公室里混个好人缘?如何在同事圈里留个好印象?其实,想要让自己成为受欢迎的人,只要让自己成为大家需要的人不就行...

foxit2world
23分钟前
7
0
AndServer+Service打造Android服务器实现so文件调用

so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。 native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实...

夜幕NightTeam
24分钟前
4
0
Docker下kafka学习三部曲之二:本地环境搭建

在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写...

程序员欣宸
24分钟前
4
0
萌新推荐!不再为Excel转换PDF发愁,Aspose.Cells for .NET一步到位!

Aspose.Cells for .NET(点击下载)是Excel电子表格编程API,可加快电子表格管理和处理任务,支持构建具有生成,修改,转换,呈现和打印电子表格功能的跨平台应用程序。 将Excel工作簿转换为...

mnrssj
25分钟前
6
0
对于绘画小白怎么画制服?该注意什么?

怎样制作学生服装?想必绘画初学者们常常会想的问题吧,不知道怎样才能画好人物的衣服,别着急,今日就在这儿讲一些关于如何绘画学生衣服校服的教程给我们!期望能够帮到你们! 轻便西装是不...

热爱画画的我
31分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部