1.
出现问题了。
student的析构函数不是virtual,编译器对其使用静态联编,根据指针类型(student*),只调用student的析构函数
2. 基数的析构函数使用virtual
原则:析构函数应当是虚函数,除非类不用作基数。
阅读(224) | 评论(0) | 转发(0) |
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
- //基数student的析构函数不是vi
- #include <iostream>
- #include <stdio.h>
- using namespace std;
-
- class student{
- public:
- student(){
- printf("%s constructor\n", __FUNCTION__);
- }
- ~student(){
- printf("%s destructor\n", __FUNCTION__);
- }
- //virtual void study();
- private:
- string m_name;
- };
-
- class studentLeader:public student{
- public:
- studentLeader() {
- printf("%s constructor\n", __FUNCTION__);
- }
- ~studentLeader(){
- printf("%s destructor\n", __FUNCTION__);
- }
- //virtual void study();
- };
-
-
- int main(int argc, char **argv)
- {
- studentLeader *sl = new studentLeader();
- delete sl;
- return 0;
- }
-
- ./a.out
- student constructor
- studentLeader constructor
- ~studentLeader destructor
- ~student destructor
student的析构函数不是virtual,编译器对其使用静态联编,根据指针类型(student*),只调用student的析构函数
- int main(int argc, char **argv)
- {
- student *s = new studentLeader();
- delete s;
- return 0;
- }
-
- ./a.out
- student constructor
- studentLeader constructor
-
- ~student destructor
原则:析构函数应当是虚函数,除非类不用作基数。
-
- #include <iostream>
- #include <stdio.h>
- using namespace std;
-
- class student{
- public:
- student(){
- printf("%s constructor\n", __FUNCTION__);
- }
- virtual ~student(){
- printf("%s destructor\n", __FUNCTION__);
- }
- //virtual void study();
- private:
- string m_name;
- };
-
- class studentLeader:public student{
- public:
- studentLeader() {
- printf("%s constructor\n", __FUNCTION__);
- }
- ~studentLeader(){
- printf("%s destructor\n", __FUNCTION__);
- }
- //virtual void study();
- };
-
- int main(int argc, char **argv)
- {
- //指针类型是基数
- student *s = new studentLeader();
- delete s;
- return 0;
- }
- ./a.out
- student constructor
- studentLeader constructor
- ~studentLeader destructor //关键
- ~student destructor
相关热门文章
给主人留下些什么吧!~~
评论热议