我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 虚的析构函数主要用在哪个地方? 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

yan



性别: 保密 状态: 该用户目前不在线
等级: 人见人爱
发贴: 2255
威望: 0
浮云: 1122
在线等级:
注册时间: 2006-02-23
最后登陆: 2008-06-29

5come5帮你背单词 [ travel /'trævl/ vi. 旅行,行进,走,运行,运行,传达,室播;n. 旅行 ]


虚的析构函数主要用在哪个地方?

RT,还有要怎么使用啊?
顶端 Posted: 2007-12-04 13:55 | [楼 主]
yan



性别: 保密 状态: 该用户目前不在线
等级: 人见人爱
发贴: 2255
威望: 0
浮云: 1122
在线等级:
注册时间: 2006-02-23
最后登陆: 2008-06-29

5come5帮你背单词 [ opponent /ə'pəunənt/ a. 对立的,反对的;n. 对手,敌手 ]


能举个例子么?
顶端 Posted: 2007-12-04 14:12 | [1 楼]
yan



性别: 保密 状态: 该用户目前不在线
等级: 人见人爱
发贴: 2255
威望: 0
浮云: 1122
在线等级:
注册时间: 2006-02-23
最后登陆: 2008-06-29

5come5帮你背单词 [ look /luk/ vi. 看,瞧,看起来,显得;n. 看望,外表,脸色 ]


还是搞不懂啊,如果有具体的例子就更好了。
顶端 Posted: 2007-12-11 18:24 | [2 楼]
yan



性别: 保密 状态: 该用户目前不在线
等级: 人见人爱
发贴: 2255
威望: 0
浮云: 1122
在线等级:
注册时间: 2006-02-23
最后登陆: 2008-06-29

5come5帮你背单词 [ parent /'p/ərənt/ n. 父亲,母亲,动(植)物的母体,起源,根本 ]


我终于明白了:
Copy code
#include <stdio.h>

class A
{
public:
    A()
    {
        printf("call A::A\n");
    }

    ~A()
    {
        printf("call A::~A\n");
    }
};

class B:public A
{
private:
    int *p;
public:
    B()
    {
        p = new int[1000];
        printf("call B::B\n");
    }

     ~B()
    {
         if (p)
         {
             delete []p;
         }
        printf("call B::~B\n");
    }
};

int main(int argc, int *argv[])
{
    A *z = new B;

    delete z;
    return 0;
}

运行结果是:
call A::A
call B::B
call A::~A
没有把p指针指向的内存释放掉。
顶端 Posted: 2007-12-11 19:36 | [3 楼]
yan



性别: 保密 状态: 该用户目前不在线
等级: 人见人爱
发贴: 2255
威望: 0
浮云: 1122
在线等级:
注册时间: 2006-02-23
最后登陆: 2008-06-29

5come5帮你背单词 [ footnote /'futnəut/ n. (书中的)脚注;vt. 为…作脚注 ]


Copy code
#include <stdio.h>

class A
{
public:
    A()
    {
        printf("call A::A\n");
    }

    virtual ~A()
    {
        printf("call A::~A\n");
    }
};

class B:public A
{
private:
    int *p;
public:
    B()
    {
        p = new int[1000];
        printf("call B::B\n");
    }

    ~B()
    {
        if (p)
        {
            delete []p;
        }
        printf("call B::~B\n");
    }
};

int main(int argc, int *argv[])
{
    A *z = new B;

    delete z;
    return 0;
}

在A的析构函数中加了vritual
结果是:
call A::A
call B::B
call B::~B
call A::~A
这样才是正确的。
顶端 Posted: 2007-12-11 19:37 | [4 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.011382(s) query 6, Time now is:07-04 11:43, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号