首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++:默认析构函数:是否删除成员指针指向的数组?

C++中的默认析构函数不会自动删除成员指针指向的数组。默认析构函数只会释放对象自身所占用的内存,而不会递归地释放成员变量所指向的内存。

如果成员变量是指向数组的指针,并且在类的析构函数中需要释放这块内存,开发工程师需要手动编写析构函数来完成这个操作。在析构函数中,可以使用delete[]来释放指针指向的数组内存。

以下是一个示例代码:

代码语言:txt
复制
class MyClass {
private:
    int* arr;

public:
    MyClass() {
        arr = new int[10];
    }

    ~MyClass() {
        delete[] arr;
    }
};

在上述示例中,MyClass类中的成员变量arr是一个指向整型数组的指针。在构造函数中,我们使用new运算符动态分配了一个长度为10的整型数组,并将指针赋值给arr。在析构函数中,我们使用delete[]运算符释放了arr指针指向的数组内存。

这样,在MyClass对象被销毁时,析构函数会被调用,从而释放成员变量arr所指向的数组内存,避免内存泄漏。

推荐的腾讯云相关产品:无

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++干货基地】六大默认成员函数: This指针 | 构造函数 | 函数

C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态成员函数“增加了一个隐藏指针参数,让该指针指向当前对象(函数运行时调用该函数对象),在函数体中所有“成员变量”操作,都是通过该指针去访问...4.2 函数特性 函数是特殊成员函数,其特征如下: 函数名是在类名前加上字符 ~。 无参数无返回值类型。 一个类只能有一个函数。若未显式定义,系统会自动生成默认函数。...注意:函数不能重载 对象生命周期结束时,C++编译系统系统自动调用函数。...,但是在程序结束时候自动调用 关于编译器自动生成函数是否会完成一些事情呢?...下面的程序我们会看到,编译器 生成默认函数,对自定类型成员调用它函数

9000

C++初阶】类与对象:6个默认成员函数-----构造函数函数

我们在写代码时候经常会忘记初始化和销毁,C++构造函数函数就能避免这个问题。 默认成员函数:用户没有显式实现,编译器会生成成员函数称为默认成员函数。...如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参默认构造函数,一旦用户显式定义编译器将不再生成。...函数名是在类名前加上字符 ~; 2. 无参数无返回值类型; 3. 一个类只能有一个函数。若未显式定义,系统会自动生成默认函数。注意:函数不能重载; 4....对象生命周期结束时,C++编译系统系统自动调用函数; 5.与构造函数相同:    a.函数对内置函数不做处理;    b.对自定义类型会去调用自定义类型函数; class Eve...,且自定义类型都有默认构造函数函数 1.一般情况下,有动态申请资源,就需要显示写函数释放资源; 2.没有动态申请资源,不需要写函数; 3.需要释放资源成员都是自定义类型,且自定义类型有函数

13410
  • C++从入门到精通——类6个默认成员函数函数

    函数 前言 一、函数概念 二、函数特性 三、函数练习题 四、总结 前言 类6个默认成员函数:如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?...在C++中,函数是一种特殊成员函数,用于在对象被销毁时清理其使用资源。它名称与类名称相同,前面加上一个波浪线(~),没有返回类型,也不接受任何参数。...二、函数特性 函数是特殊成员函数,其特征如下: 函数名是在类名前加上字符 ~。 无参数无返回值类型。 一个类只能有一个函数。若未显式定义,系统会自动生成默认函数。...注意:函数不能重载 对象生命周期结束时,C++编译系统系统自动调用函数。...下面的程序我们会看到,编译器生成默认函数,对自定类型成员调用它函数。跟构造函数类似,内置类型不做处理,自定义类型调用它函数

    35110

    C++】多态 ⑤ ( 虚函数 | 虚函数语法 | 虚函数意义 | 父类指针指向子类对象情况下父类和子类使用 virtual 虚函数 | 代码示例 )

    A 构造函数 , 然后调用 B 构造函数 , 最后调用 C 构造函数 ; 参考 【C++】继承 ⑧ ( 继承 + 组合 模式类对象 构造函数函数 调用规则 ) 博客中 , 构造函数...成员 构造函数 ; 也就是 成员变量 类型 构造函数 ; 最后 , 调用 自己 构造函数 ; 自身定义 构造函数 ; 函数 : 自身 -> 成员 -> 父类 ; 首先 , 调用 自己 函数...; 自身定义 函数 ; 然后 , 调用 成员 函数 ; 也就是 成员变量 类型 函数 ; 最后 , 调用 父类 函数 ; 2、函数可以是虚函数 函数 可以是 虚函数 ; 虚函数...delete 释放 A 类型指针指向对象 ; 由于 A 类型指针指向 是一个 B 类型对象 , 对象实际类型是 B 类型 , 而且 B 是 A 子类 , 其成员多余 A , 因此必须调用 B...; 当使用 父类 指针指向一个 子类 对象时 , 如果要通过 delete 释放该指针指向对象 , 如果是正常函数 , 没有 使用 virtual 定义虚函数 , 则只会调用 父类 函数

    1.1K20

    C++修行之道】类和对象(二)类6个默认成员函数、构造函数函数

    2.4 一般情况,建议每个类,都可以写一个全缺省构造(好用) 三、函数 3.1 概念 3.2 特性 3.3 C++实现括号匹配和C语言不同 一、类6个默认成员函数 如果一个类中什么成员都没有,...3.2 特性 函数是特殊成员函数,其特征如下: 函数名是在类名前加上字符 ~。 无参数无返回值类型。 一个类只能有一个函数。若未显式定义,系统会自动生成默认函数。...注意:函数不能重载 对象生命周期结束时,C++编译系统系统自动调用函数。...关于编译器自动生成函数是否会完成一些事情呢?下面的程序我们会看到,编译器生成默认函数,对自定类型成员调用它函数。...但是:main函数中不能直接调用Time类函数,实际要释放是Date类对象,所以编译器会调用Date类函数,而Date没有显式提供,则编译器会给Date类生成一个默认函数

    15210

    c++系列之二 指向成员函数指针(烧脑)

    ,原文详细解释了C++指向成员函数指针,因为带有“教程”一词,所以比较通俗易懂。...如果对翻译君翻译质量有意见,建议前往 原地址 围观。 咦?还不走?那废话少说,我们开始了啊。 关于成员函数指针 成员函数指针C++最少用到语法之一,甚至有经验C++码农有时候也会被它搞晕。...因为 “一个指向成员指针能在不同地址空间之间传递,只要二者使用对象布局一样” (此话来自C++老爸 Bjarne Stroustrup C++程序设计语言》 )。...成员函数指针数组及其应用 成员函数指针一个重要应用就是根据输入来生成响应事件,下面的 Printer 类和指针数组 pfm 展示了这一点: class Printer { // 一台虚拟打印机 public...成员函数指针和常规指针对比 不同情形下成员函数指针转换规则 如何使用成员函数指针数组来解决特定设计问题 编译器是如何解释成员函数调用 扩展:成员变量指针 http://luodw.cc/2015

    3K20

    C++ this指针:用于在成员函数指向调用该函数对象

    C++中this指针是一个指向当前对象指针。在成员函数中,可以使用this指针来访问调用该函数对象成员变量和成员函数。...一、定义和使用this指针 this指针是在成员函数内部定义一个常量指针。它存储了当前对象地址,可以通过它访问当前对象成员变量和成员函数。...二、作为返回值this指针 this指针可以作为返回值返回。这种情况下,返回指向调用该函数对象指针。为了实现这个功能,需要将返回类型设置为类引用或指针类型。...,返回指向调用该函数对象指针。...四、总结 this指针C++中是一个非常重要概念,可以用来访问调用该函数对象,作为返回值返回,或者作为函数参数传递。掌握this指针使用可以帮助我们更好地编写面向对象程序。

    24740

    C++四个默认函数(构造函数函数,拷贝函数,赋值函数

    C++中,对于一个类,C++编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认函数 A(const A&) //默认拷贝构造函数 A& operator...函数 与构造函数相对立函数,这个函数在对象销毁之前自动调用,例如在构造函数中,我们为成员变量申请了内存,我们就可以在函数中将申请内存释放,函数写法是在构造函数基础上加一个~符号...这个例子调用默认拷贝构造函数(注意看控制台显示,调用了一次构造函数和两次函数),可以看出两个对象成员变量地址是不一样,当成员变量不存在指针类型是,这样做没什么问题,当类中有指针变量,自动生成拷贝函数注定会出错...可以看到两个对象指针成员所指内存相同(内存里面存着字符串:花狗),还记得函数作用吗,在对象销毁之前自动调用,在构造函数中,我们为成员变量申请了内存,我们就可以在函数中将申请内存释放。...= NULL; } 再运行发现程序崩溃了,调用一次构造函数,调用两次函数,两个对象指针成员所指内存相同,name指针被分配一次内存,但是程序结束时该内存却被释放了两次,导致程序崩溃 ?

    2.2K20

    C++】类和对象(中):类默认成员函数,构造函数函数、拷贝构造函数、运算符重载

    默认成员函数很重要,也比较复杂,我们要从两个方面去学习: 1.我们不写时,编译器默认生成函数行为是什么,是否满足我们需求(大多数不满足)。...函数不是完成对对象本身销毁,比如局部对象是存在栈帧函数结束,栈帧销毁,他就释放了不需要我们管。C++规定对象在销毁时会自动调用函数,完成对象中资源清理释放工作。...4.对象生命周期结束时,系统自动调用函数。 5.跟构造函数类似,我们不写编译器自动生成函数对内置类型成员不做处理,自定义类型成员会调用他函数。...因为是值拷贝,s1和s2_a指向了同一块空间。 当我们时,这块空间就被了两次,同一块空间是不能被释放两次。所以这也说明了编译器自动生成拷贝构造函数不符合我们要求,要自己写。...} operator==这个函数如果放在类里面做成员函数成员函数第一个参数会默认传this指针,那么它第一个运算对象就会默认传给隐式this指针函数体就像下面这样写。

    8810

    七、构造函数函数

    七、构造函数函数 构造函数C++中,构造函数是一种特殊成员函数,它用于初始化类对象。当创建类对象时,构造函数会被自动调用。...构造函数在创建对象时被调用,而不是在通过指针或引用调用对象时被调用。 函数C++中,函数是另一个特殊成员函数,它在对象生命周期结束时被自动调用。...函数可以是虚函数,这在处理基类指针指向派生类对象(多态)时非常重要。通过将基类函数声明为虚函数,可以确保在删除基类指针时调用正确函数(即派生类函数)。...因此,函数中应尽量避免抛出异常。 总结 构造函数函数C++中用于管理对象生命周期特殊成员函数。...此外,如果其中一个对象删除了它指向数据,那么另一个对象将成为一个悬挂指针(dangling pointer),指向不再有效内存区域。

    9110

    Cpp虚函数相关知识点

    如果一个类中有虚函数,那么编译器会在类开始位置设置一个虚函数指针指向一个数组(每一个元素都是函数指针), 这个数组就是虚函数表,它存储着每个虚函数地址。...可以看这一篇文章探索C++函数在g++中实现,讲很详细。 函数为什么是虚函数 明白了虚函数特点,这个问题就不难了。...当基类指针指向子类对象时候,在对象使用完毕需要释放时,肯定需要调用子类对象函数呀,所以这种情况下函数也得是虚函数。...也可以看这段话: 基类指针可以指向派生类对象(多态性),如果删除指针delete []p; 就会调用该指针指向派生类函数,而派生类函数又自动调用 基类函数,这样整个派生类对象完全被释放...如果函数不被声明成虚函数,则编译器实施静态绑定, 在删除基类指针时,只会调用基类函数而不调用派生类函数, 这样就会造成派生类对象不完全。所以,将函数 声明为虚函数是十分必要

    38720

    C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

    注意:构造函数不能为虚函数,但是函数可以为虚函数,并且虚函数可以防止父类指针销毁子类对象时不正常导致内存泄漏。 12、C++中struct和class区别?...由于类多态性,基类指针可以指向派生类对象,如果删除该基类指针,就会调用该指针指向派生类函数,而派生类函数又自动调用基类函数,这样整个派生类对象完全被释放。...如果函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类函数而不调用派生类函数,这样就会造成派生类对象不完全,造成内存泄漏。...将函数声明为虚函数,在实现多态时,当用基类操作派生类,在时防止只基类而不派生类状况发生,要将基类函数声明为虚函数。...C++中,初始化时在执行相关代码时才会进行初始化,主要是由于C++引入对象后,要进行初始化必须执行相应构造函数函数,在构造函数函数中经常会需要进行某些程序中需要进行特定操作,并非简单地分配内存

    2.1K20

    《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

    假设基类中采用是非虚函数,当删除基类指针指向派生类对象时就不会触发动态绑定,因而只会调用基类函数,而不会调用派生类函数。...每一个类必须有一个函数,用户可以自定义函数,也可以是编译器自动生成默认函数。一般函数定义为类公有成员。...2) 函数顺序 ① 调用派生类函数; ② 调用成员类对象函数; ③ 调用基类函数。 79、虚函数作用,父类函数是否要设置为虚函数?...假设基类中采用是非虚函数,当删除基类指针指向派生类对象时就不会触发动态绑定,因而只会调用基类函数,而不会调用派生类函数。...避免方法就是将第一个指针(比如a->value)置为NULL,这样在调用函数时候,由于有判断是否为NULL语句,所以a时候并不会回收a->value指向空间; 3) 移动构造函数参数和拷贝构造函数不同

    2.3K40

    后台开发:核心技术与应用实践 -- C++

    数组指针指针数组 数组指针也称为行指针:假设有定义 int (*p)[n];且()优先级高,首先说明p是一个指针,且指向一个整型一维数组。...它有n个指针类型数组元素。 int *p[3]; 优先级 () > [] > * 函数指针指向函数指针变量 所以,函数指针首先是个指针变量,而且这个变量指向一个函数。...在派生时,派生类是不能继承基类函数,也需要通过派生类函数去调用基类函数。...在执行派生类函数时,系统会自动调用基类函数和子对象函数,对基类和子对象进行清理。...C++明确指出,当derived class 对象经由 base class 指针删除 而该 base class 带着一个non-virtual 函数, 导致对象 derived 成分没被销毁掉

    1.3K10

    C++】42道面试经典问题总结

    而且提供了函数,那么用new[] 就一定要用delete[]ptr,不能够混用。 delete相对于free,1.调用函数2.释放内存 C++static关键字作用?...动态多态是指运行时期多态,比如虚函数和通过基类指针/引用指向派生类对象 C++ 空间配置器是什么?...当容器删除一个元素时不应该进行内存释放(后面可能会继续使用),只用把对象掉即可。 vector和list区别? vector底层数据结构是数组,list底层数据结构是链表。...构造函数不可以使虚函数函数可以是虚函数 构造函数不能是虚函数,因为对象还没有构造出来,也就没有虚函数指针,没有虚函数指针也就无法指向函数表。...虚函数,把基类函数实现成虚函数,则对函数调用进行动态绑定,基类、派生类函数就都可以调用到 构造函数函数中能不能抛出异常?

    9210

    CC++面试常问题集(2)

    6、哪些成员函数不能被继承? C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、函数、赋值运算符重载函数。...因此,在创建子类对象时,为了初始化从父类继承来数据成员,系统需要调用其父类构造方法。 二,函数  函数也不会被子类继承,只是在子类函数中会调用父类函数。...假设基类中采用是非虚函数,当删除基类指针指向派生类对象时就不会触发动态绑定,因而只会调用基类函数,而不会调用派生类函数。...delete[]删除一个数组,为每个数组元素调用函数;delete删除单个对象,只会调用一次函数。...简单来说,用new分配内存用delete删除;用new[]分配内存用delete[]删除。内部数据类型没有函数,所以问题不大。

    1.2K10

    C++重要知识点小结---3

    用户分配对象,但由智能指针删除它,因此智能指针类需要实现复制控制成员来管理指向共享对象指针。只有在撤销了指向共享对象最后一个智能指针后,才能删除该共享对象。...当两个指针指向同一个动态创建对象,删除就会发生错误。 3.类成员函数重载、覆盖和隐藏区别?    ...C++空类,默认产生哪些类成员函数?...46 } 剖析:   能够准确无误地编写出String类构造函数、拷贝构造函数、赋值函数函数面试者至少已经具备了C++基本功60%以上!   ...在这个类中包括了指针成员变量m_data,当类中包括指针成员变量时,一定要重载其拷贝构造函数、赋值函数函数,这既是对C++程序员基本要求,也是《Effective C++》中特别强调条款。

    91061

    C++知识概要

    另外,virtual 函数是在不同类型对象产生不同动作,现在对象还没有产生,也就不能使用 virtual 函数来完成你想完成动作 函数为什么要虚函数 C++中基类采用 virtual 虚函数是为了防止内存泄漏...假设基类中采用是非虚函数,当删除基类指针指向派生类对象时就不会触发动态绑定,因而只会调用基类函数,而不会调用派生类函数。...key,就将一个具有该 key 和 value 默认值插入这个 map erase()函数,只能删除内容,不能改变容量大小; erase 成员函数,它删除了 itVect 迭代器指向元素,并且返回要被删除...,new[]会额外存储数组大小 delete 简单数据类型默认只是调用 free 函数;复杂数据类型先调用函数再调用 operator delete;针对简单类型,delete 和 delete[...因为 C++语言机制保证了,当一个对象创建时候,自动调用构造函数,当对象超出作用域时候会自动调用函数

    1.1K20

    C++面试知识总结

    2.7 delete和delete[]区别 delete只会调用一次函数,delete[]会调用每一个成员函数。...2.14 野指针,未初始化指针和空指针区别 野指针指向一个已删除对象或无意义地址指针。 原因:指针变量没有被初始化,或者指针p被free或者delete之后,没有置为NULL。  ...3.3 空类默认成员函数 默认构造函数 函数 复制构造函数 赋值运算符 3.4 类成员函数重载、覆盖和隐藏概念和区别 重载是指再同一个作用域内,有几个同名函数,但是参数列表个数和类型不同。...3.5 基类和子类构造、顺序 定义一个对象时先调用基类构造函数、然后调用派生类构造函数 先派生类后基类,也就是说在基类调用时候,派生类信息已经全部销毁了 3.6 深拷贝与浅拷贝区别...  3.8 函数特点 函数名称固定:~类名( ) 没有返回类型,没有参数 不可以重载,一般由系统自动调用 3.8 公有继承、私有继承、受保护继承 公有继承时,派生类对象可以访问基类中公有成员

    1.7K41
    领券