| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2411 人关注过本帖
标题:问一个内存泄露的问题--通常人们称之为匿名对象
只看楼主 加入收藏
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
 问题点数:0 回复次数:15 
问一个内存泄露的问题--通常人们称之为匿名对象
///例如我有一个类

////////////////////////////////
////类头文件/////
////////////////////////////
#include "iostream.h"

class A
{
public :
    A();
    A(A* p);
    A(int para1,int para2);
    ~A();
    void show();
private :
    int a;
    int b;
};
////////////////////////
////头文件完
/////////////////////////


/////////////////////
///实现部分
////////////////////////
A::A():a(0),b(0)
{
   
}

A::A(A *p)
{
    a=p->a;
    b=p->b;
}


A::A(int para1,int para2):a(para1),b(para2)
{
    
}

void A::show()
{
   cout<<a<<endl;
   cout<<b<<endl;
}
///////////////////////////
////实现部分完
////////////////////////////


//////////////////////////////
/////函数入口部分
//////////////////////////
A* TestFuncA(int a,int b)
{
    return new A(a,b);
    //问题就在这里,申明了匿名对象后,怎么释放匿名对象的内存  
    //例如主函数的调用方式。怎么释放现在分配的内存?
}

int TestFuncB(A *a)
{
    A* temp = a;
   
    if(temp!=NULL)
    {
        temp->show();
        return 1;
    }
    else
    {
        return -1;
    }
}

void main()
{

    TestFuncB(TestFuncA(10 , 20));
    
}
搜索更多相关主题的帖子: 内存 对象 匿名 
2008-10-07 22:29
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
delete

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-07 22:34
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
怎么个delete法?

我用VC++6我怕谁?
2008-10-07 22:40
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
[bo][un]守鹤[/un] 在 2008-10-7 22:34 的发言:[/bo]

delete

 可以说仔细吗?已经没指针指向了。。。

学习需要安静。。海盗要重新来过。。
2008-10-07 22:44
lscmxl
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2006-6-12
收藏
得分:0 
return new A(a,b); 非要这么写吗?
麻烦点就定义个全局变量指向它的首地址,析构时delete全局变量吧。
愚见。
2008-10-08 13:32
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
问一个内存泄露的问题。我的理解是,在一个应用程序生命周期里面,由于new的对象没有赋值给指针,这样就没办法delete了。一旦这个过程持续,导致内存越用越少,程序越来越慢,java有垃圾回收机制,但是c++必须自己释放。。。c++primer里面有种p_str类,c++自身也有一种工厂化模式。。。都可以自己看看

学习需要安静。。海盗要重新来过。。
2008-10-08 15:12
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
我的核心思想就是想问问怎么释放匿名对象的内存。

我用VC++6我怕谁?
2008-10-08 18:21
yzy6806555
Rank: 1
来 自:河南工业大学
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-2-28
收藏
得分:0 
没有见过啊?
如果没人回答,还得最笨的办法啦!再重新定义个内部指针了,
2008-10-08 21:53
忘记喧嚣
Rank: 1
等 级:新手上路
帖 子:146
专家分:0
注 册:2007-10-7
收藏
得分:0 
我决得 可以用一个 A对象来接收
A* TestFuncA(int a,int b)
{
    return new A(a,b);
    //问题就在这里,申明了匿名对象后,怎么释放匿名对象的内存  
    //例如主函数的调用方式。怎么释放现在分配的内存?
}
这个的返回值(不知道可以引用不)  然后释放这个 这个创建的对象
应该就可以释放了
2008-10-08 23:16
冰烨
Rank: 1
来 自:不咔界
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2007-10-30
收藏
得分:0 
A* TestFuncA(int a,int b)
{
    return new A(a,b);
    //问题就在这里,申明了匿名对象后,怎么释放匿名对象的内存  
    //例如主函数的调用方式。怎么释放现在分配的内存?
}
这个的返回值是申请空间的地址的话应该是可以被使用的
所以 当TestFuncB(TestFuncA(10 , 20));时候,这个地址便成了TestFuncB的实参了。。
那么
int TestFuncB(A *a)
{
    A* temp = a;
   
    if(temp!=NULL)
    {
        temp->show();
        delete a;//释放a指向的内存就OK了吧
        return 1;
    }
    else
    {
        return -1;
        delete a;//释放a指向的内存就OK了吧

    }
}

要么死去,要么奋斗!
2008-10-09 08:48
快速回复:问一个内存泄露的问题--通常人们称之为匿名对象
数据加载中...
 
   



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

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