析构函数里可以调用虚函数嘛

wzuxian2012 2013-02-05 07:15:57
class test
{
virtual void fun(){}

public:

~test
{
fun();

}

}

问题1:这个代码对吗?

问题2; 对象是什么时候被销毁的,是析构函数执行完毕,才被销毁的么?

还是进入析构函数,就开始销毁了一些成员啊,什么的?



...全文
337 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
g2262938 2013-02-05
1.这样的代码不对:首先你的自己构建的析构函数就是一个格式错误的 2.通常来说:析构函数是隐士调用(系统当发现这个对象无用时),无需程序员调用的 3.对你标题谁问到的一个问题:析构函数能否调用虚函数,其实是可以的, 但是这个析构函数必须是自己构建的才可以
  • 打赏
  • 举报
回复
zslInSz 2013-02-05
// xi_gou.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>

class test{
public:
test(){
};
virtual void fun()
{
printf("hello world1\n");
}
~test()
{
fun();

}
};
int main(int argc, char* argv[])
{
test *a=new test;
delete a;

return 0;
}
  • 打赏
  • 举报
回复
lvjing_CSDN 2013-02-05
引用 3 楼 wzuxian2012 的回复:
引用 2 楼 lvjing_CSDN 的回复:可以调用,但是不再有多态性,其调用的是当前类所定义的函数。 那问题2呢?
额,我没看完。首先你的程序和你想要表达的我觉得有点问题,如果要获得多态必须要使用指针或者引用来调用虚函数。而你的确实直接调用的,你可以这样实验:
#include <iostream>


class Base
{
public:
    virtual void fun()
    {
        std::cout << "Base fun\n";
    }
    virtual ~Base(){this ->fun();}
};

class Derived:public Base
{
public:
    void fun()
    {
        std::cout << "Derived fun\n";
    }
};
int main()
{
    Base *ptr(new Derived);
   // ptr->fun();
    delete ptr;
    return 0;
}
输出:Base fun 问题2: 对象的销毁应该分为两个阶段:1、释放对象持有的资源。2、释放对象本身所占有的内存。析构函数只负责第一个阶段。第二个阶段是由编译器(在栈上定义的对象)或者delete(在堆上定义的对象)来完成。所以对象在析构函数的哪个地方释放其所持有的资源是有程序作者决定的。
  • 打赏
  • 举报
回复
撸过........
  • 打赏
  • 举报
回复
wzuxian2012 2013-02-05
引用 2 楼 lvjing_CSDN 的回复:
可以调用,但是不再有多态性,其调用的是当前类所定义的函数。
那问题2呢?
  • 打赏
  • 举报
回复
lvjing_CSDN 2013-02-05
可以调用,但是不再有多态性,其调用的是当前类所定义的函数。
  • 打赏
  • 举报
回复
derekrose 2013-02-05
不可以,因为在析构函数里面虚函数不会传到子类中
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2013-02-05 07:15
社区公告
暂无公告