时间:2021-05-20
C++ 中继承与动态内存分配的详解
继承是怎样与动态内存分配进行互动的呢?例如,如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?这个问题的答案取决于派生类的属性。如果派生类也使用动态内存分配,那么就需要学习几个新的小技巧。下面来看看这两种情况:
一.派生类不使用new
派生类是否需要为显示定义析构函数,复制构造函数和赋值操作符呢?
不需要!
首先,来看是否需要析构函数,如果没有定义析构函数,编译器将定义一个不执行任何操作的默认构造函数。实际上,派生类的默认构造函数总是要执行一些操作:执行自身的代码后调用基类析构函数。因为我们假设派生类的成员不需要执行任何特殊操作,所以默认析构函数是合适的。
再看复制构造函数。默认复制构造函数执行成员复制,这对于动态内存分配来说是不合适的,但对于新的派生类的成员来说是合适的。因此只需要考虑继承的基类的对象。要知道,成员复制将根据数据类型采用相应的复制方式,因此复制类成员或继承的类组件时,则是使用该类的复制构造函数完成的。所以派生类的默认复制构造函数使用基类的显示复制构造函数来复制派生类对象的基类成员部分。因此,默认复制构造函数对于新的派生类而言是合适的。
对于赋值来说,同样道理。
二.派生类使用new。
如果派生类需要new操作,那么需要显示定义析构函数,复制构造函数和赋值操作符。
派生类析构函数自动调用基类的构造函数,故其自身的职责是对派生类构造函数执行工作的进行清理。
接下来看复制构造函数:
看赋值操作符:
总之,当基类和派生类都采用动态内存分配时,派生类的析构函数,复制构造函数以及赋值操作符都必须使用想用的基类方法来处理基类元素。这种要求是通过三种不同的方式来满足的。
1.对于析构函数,这是自动完成的;
2.对于构造函数,这是通过在初始化成员列表中调用基类的复制构造函数来完成的;如果不是这样做,将自动调用基类的默认构造函数。
3.对于复制操作符,这是通过使用作用域解析操作符显示的调用基类的赋值操作符来完成了。
以上就是C++ 中继承与动态内存分配的详解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1、C++中的动态内存分配通过new关键字进行动态内存申请C++中的动态内存申请时基于类型进行的delete关键用于内存释放C语言其实是不支持动态内存分配的,是
C语言动态内存分配的详解1.为什么使用动态内存分配数组在使用的时候可能造成内存浪费,使用动态内存分配可以解决这个问题。2.malloc和freeC函数库提供了两
C语言malloc()函数:动态分配内存空间头文件:#includemalloc()函数用来动态地分配内存空间(如果你不了解动态内存分配,请查看:C语言动态内存
C++this指针详解学习C++的指针既简单又有趣。通过指针,可以简化一些C++编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成
继承和动态内存分配假设基类使用了动态内存分配,而且定义了析构函数、复制构造函数和赋值函数,但是在派生类中没有使用动态内存分配,那么在派生类中不需要显示定义析构函