C++ 中继承与动态内存分配的详解

所属分类: 软件编程 / C 语言 阅读数: 57
收藏 0 赞 0 分享

C++ 中继承与动态内存分配的详解

继承是怎样与动态内存分配进行互动的呢?例如,如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?这个问题的答案取决于派生类的属性。如果派生类也使用动态内存分配,那么就需要学习几个新的小技巧。下面来看看这两种情况:

一.派生类不使用new

派生类是否需要为显示定义析构函数,复制构造函数和赋值操作符呢?

不需要!

首先,来看是否需要析构函数,如果没有定义析构函数,编译器将定义一个不执行任何操作的默认构造函数。实际上,派生类的默认构造函数总是要执行一些操作:执行自身的代码后调用基类析构函数。因为我们假设派生类的成员不需要执行任何特殊操作,所以默认析构函数是合适的。

再看复制构造函数。默认复制构造函数执行成员复制,这对于动态内存分配来说是不合适的,但对于新的派生类的成员来说是合适的。因此只需要考虑继承的基类的对象。要知道,成员复制将根据数据类型采用相应的复制方式,因此复制类成员或继承的类组件时,则是使用该类的复制构造函数完成的。所以派生类的默认复制构造函数使用基类的显示复制构造函数来复制派生类对象的基类成员部分。因此,默认复制构造函数对于新的派生类而言是合适的。

对于赋值来说,同样道理。

二.派生类使用new。

如果派生类需要new操作,那么需要显示定义析构函数,复制构造函数和赋值操作符。

派生类析构函数自动调用基类的构造函数,故其自身的职责是对派生类构造函数执行工作的进行清理。

接下来看复制构造函数:

DerivedClass::DerivedClass(const DerivedClass& de):BaseClass(de)
{
//.......
}

看赋值操作符:

DerivedClass::operator=(const DerivedClass& de)
{
if(this == &de) return *this;
BaseClass::operator=(de);
//..........
}

总之,当基类和派生类都采用动态内存分配时,派生类的析构函数,复制构造函数以及赋值操作符都必须使用想用的基类方法来处理基类元素。这种要求是通过三种不同的方式来满足的。

1.对于析构函数,这是自动完成的;

2.对于构造函数,这是通过在初始化成员列表中调用基类的复制构造函数来完成的;如果不是这样做,将自动调用基类的默认构造函数。

3.对于复制操作符,这是通过使用作用域解析操作符显示的调用基类的赋值操作符来完成了。

以上就是C++ 中继承与动态内存分配的详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多精彩内容其他人还在看

visual studio 2019编译c++17的方法

这篇文章主要介绍了visual studio 2019编译c++17的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Qt串口通信开发之QSerialPort模块详细使用方法与实例

这篇文章主要介绍了Qt串口通信开发之QSerialPort模块详细使用方法与实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt串口通信开发之Qt串口通信模块QSerialPort开发完整实例(串口助手开发)

这篇文章主要介绍了Qt串口通信开发之Qt串口通信模块QSerialPort开发完整实例(串口助手开发),需要的朋友可以参考下
收藏 0 赞 0 分享

Qt串口通信开发之QSerialPort模块简单使用方法与实例

这篇文章主要介绍了Qt串口通信开发之QSerialPort模块简单使用方法与实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法

这篇文章主要介绍了Qt串口通信开发之QSerialPort模块Qt串口通信接收数据不完整的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例

这篇文章主要介绍了Qt图形图像开发之Qt曲线图美化QChart QScatterSeries 空心点阵图,鼠标移动到上面显示数值,鼠标移开数值消失效果实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例

这篇文章主要介绍了Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例,需要的朋友可以参考下
收藏 0 赞 0 分享

C语言实现加密解密功能

这篇文章主要为大家详细介绍了C语言实现加密解密功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C++实现猴子吃桃的示例代码

这篇文章主要介绍了C++实现猴子吃桃的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

C语言实现关机小程序

这篇文章主要为大家详细介绍了C语言实现关机小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多