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

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

public:

~test
{
fun();

}

}

问题1:这个代码对吗?

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

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



...全文
394 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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(在堆上定义的对象)来完成。所以对象在析构函数的哪个地方释放其所持有的资源是有程序作者决定的。
落单的毛毛虫 2013-02-05
  • 打赏
  • 举报
回复
撸过........
wzuxian2012 2013-02-05
  • 打赏
  • 举报
回复
引用 2 楼 lvjing_CSDN 的回复:
可以调用,但是不再有多态性,其调用的是当前类所定义的函数。
那问题2呢?
lvjing_CSDN 2013-02-05
  • 打赏
  • 举报
回复
可以调用,但是不再有多态性,其调用的是当前类所定义的函数。
derekrose 2013-02-05
  • 打赏
  • 举报
回复
不可以,因为在析构函数里面虚函数不会传到子类中

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧