这篇文章主要介绍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++中继承与动态内存分配的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。