首页
学习
活动
专区
工具
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++初阶】类与对象:6个默认成员函数-----构造函数函数

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

9510

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

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

11310

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

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

20420

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

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

2.8K20

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

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

18140

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

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

2.2K20

Cpp虚函数相关知识点

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

35420

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

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

1.8K20

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

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

2.2K40

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

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

1.1K10

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

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

85661

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

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

1.3K10

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

《逆袭进大厂》之C++篇49问49答

delete[]会调用数组中每个元素函数。 10、宏定义和函数有何区别?...33、为什么函数一般写成虚函数 由于类多态性,基类指针可以指向派生类对象,如果删除该基类指针,就会调用该指针指向派生类函数,而派生类函数又自动调用基类函数,这样整个派生类对象完全被释放...如果函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类函数而不调用派生类函数,这样就会造成派生类对象不完全,造成内存泄漏。...只有在基类函数定义为虚函数时,调用操作符delete销毁指向对象基类指针时,才能准确调用派生类函数(从该级向上按序调用虚函数),才能准确销毁数据。...其次,class中函数默认是inline型,编译器也只是有选择性inline,将构造函数函数声明为内联函数是没有什么意义

1.9K10

《逆袭进大厂》之C++篇49问49答(绝对干货)

delete[]会调用数组中每个元素函数。 10、宏定义和函数有何区别?...33、为什么函数一般写成虚函数 由于类多态性,基类指针可以指向派生类对象,如果删除该基类指针,就会调用该指针指向派生类函数,而派生类函数又自动调用基类函数,这样整个派生类对象完全被释放...如果函数不被声明成虚函数,则编译器实施静态绑定,在删除基类指针时,只会调用基类函数而不调用派生类函数,这样就会造成派生类对象不完全,造成内存泄漏。...只有在基类函数定义为虚函数时,调用操作符delete销毁指向对象基类指针时,才能准确调用派生类函数(从该级向上按序调用虚函数),才能准确销毁数据。...其次,class中函数默认是inline型,编译器也只是有选择性inline,将构造函数函数声明为内联函数是没有什么意义

2.5K40

【编程基础】如何赢得C++面试

2.delete与delete []区别 delete只会调用一次函数,而delete[]会调用每一个成员函数。 3.有哪些性质(面向对象特点) 封装,继承和多态。...4.子类时要调用父类函数吗? 函数调用次序是先派生类后基类,也就是说在基类调用时候,派生类信息已经全部销毁了。...定义一个对象时先调用基类构造函数、然后调用派生类构造函数时候恰好相反:先调用派生类函数、然后调用基类函数 5.C++中class和struct区别 从语法上,在C++中(只讨论...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型内存块。 11.类成员函数重载、覆盖和隐藏区别?...(An array of 10 pointers to integers) f)一个指向有10个整型数数组指针(A pointer to an array of 10 integers) g)一个指向函数指针

1.3K70

CC++常见面试知识点总结附面试真题—-20220326更新

new出来,需要提供删除器 拓展问题 shared_ptr 是否线程安全?...指针数组数组指针区别 数组指针,是指向数组指针,而指针数组则是指该数组元素均为指针数组指针,是指向数组指针,其本质为指针,形式如下。...如 int (*p)[n],p即为指向数组指针,()优先级高,首先说明p是一个指针指向一个整型一维数组,这个一维数组长度是n,也可以说是p步长。...函数 对于栈对象或者全局对象,调用顺序与构造函数调用顺序刚好相反,也即后构造。对于堆对象,顺序与delete顺序相关。 5. 虚函数作用?...delete p; // 由于基类中是虚,这里会先调用B函数,然后调用A函数 return 0; } 但并不是要把所有类函数都写成虚函数

1.4K10

嵌入式软件工程师笔试面试指南-CC++

将可能会被继承父类函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类空间,防止内存泄漏。 为什么C++默认函数不是虚函数?...C++默认函数不是虚函数是因为虚函数需要额外函数表和虚表指针,占用额外内存。而对于不会被继承类来说,其函数如果是虚函数,就会浪费内存。...函数允许类自动完成类似清理工作,不必调用其他成员函数函数也是特殊成员函数。简单来说,函数与构造函数作用正好相反,它用来完成对象被删除一些清理工作,也就是专门扫尾工作。...(2)友元类:类A中成员函数访问类B中私有或保护成员。 基类构造函数/函数是否能被派生类继承? 基类构造函数函数不能被派生类继承。...基类函数未声明virtual,基类指针指向派生类时,delete指针不调用派生类函数。有 virtual,则先调用派生类再调用基类C++如何实现多态? C++中通过虚函数实现多态。

1.5K11
领券