| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3348 人关注过本帖
标题:有谁可以详细解释一下delete和析构函数两者之间的联系么
只看楼主 加入收藏
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
 问题点数:0 回复次数:4 
有谁可以详细解释一下delete和析构函数两者之间的联系么
他们不都是释放内存的么??不明白了
搜索更多相关主题的帖子: 内存 
2012-07-03 15:50
demonleer
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:483
专家分:1225
注 册:2012-6-4
收藏
得分:0 
delete 和 析构函数 你肿么把这两者联系起来了。

你可以在一个类的析构函数里加上delete。

这个问题应该放到C++版块里。
2012-07-03 16:54
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
delete用于释放new在堆中动态生成的对象空间。
释放时会自动调用类的析构函数,在析构函数中用于释放类内部动态分配的得到的资源。
simple:
#include <iostream>

using std::cout;
using std::endl;

class Simple{
public:
    Simple(){
        p = new int; //使用new分配空间
        *p = 10;

        pArray = new int[*p]; //使用new分配数组空间
        for(int i = 0; i < *p; i++)
            pArray[i] = i;
    }
    ~Simple(){
        cout << "\ndisconstuctor\n" << "now delete p" << endl;
        delete p;
        cout << "now delete pArray" << endl;
        delete [] pArray; //注意这里的释放配对
    }
public:
    void out(){
        cout << "p value = " << *p << endl;
        for(int i = 0; i < *p; i++)
        {
            cout << "array is " << *(pArray + i) << endl;
        }
    }
private:
    //disable copy & assign control
    Simple(const Simple&);
    const Simple& operator=(const Simple&);
private:
    int *p;
    int *pArray;
};

int main()
{
    Simple* s = new Simple; //生成堆对象

    s->out();

    delete s; //释放对象

    return 0;
}

另外需要注意的是,请为多态基类定义一个虚析构函数,并不要在析构函数中调用virtual虚函数
程序中不要以Simple为例去自己管理指针成员,请使用auto_ptr或是tr1::share_ptr进行堆对象管理,这里的Simple只是一个晰构函数使用示例。

[ 本帖最后由 hellovfp 于 2012-7-4 14:44 编辑 ]

我们都在路上。。。。。
2012-07-04 12:15
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 3楼 hellovfp
delete是释放动态分配的空间,可是析构函数里一般都只有delete这句话,那这个析构函数和delete到底是怎么回事呢,
2012-07-08 15:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
当对象在不需要的时候,比如超出作用域或用程序语句释放时,将会自动调用析构函数,你可以在这个时候进行清理对象手尾的工作,最典型的工作就是释放对象使用的动态分配的内存,这样是让你不至于不知道什么时候清理内存合适。

授人以渔,不授人以鱼。
2012-07-08 15:36
快速回复:有谁可以详细解释一下delete和析构函数两者之间的联系么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013778 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved