这样难道不是内存泄露吗?

xiaoshahui1 2003-10-21 01:23:54
有以下程序:
#include <iostrream>
using namespace std;

class CAT
{
public:
CAT();
CAT(const CAT&);
~CAT;
int GetAge() const { return *itsAge;}
int GetWeight() const { return *itssWeight;}
void SetAge(int age) { *itsAge=age;}

private:
int *itsAge;
int *itsWeight;
};


CAT::CAT()
{
23 itsAge=new int;
itsWeight=new int;
*itsAge=5;
26 *itsWeight=9;
}


29 CAT::CAT(const CAT&rhs)
{
itsAge=new int;
itsWeight=new int;
*itsAge=rhs.GetAge();
34 *itsWeight=*(rhs.itsWeight);
}

CAT::~CAT()
{delete itsAge;
itsAge=0;
delete itsWeight;
itsWeight=0;
}


int main()
{
CAT frisky;
cout<<frisky.GetAge()<<endl
frisky.SetAge(6);
52 CAT boots(frisky);
cout<<frisky.GetAge()<<endl;
frisky.SetAge(7);
cout<<frisky.GetAge()<<endl
cout<<boots.GetAge()<<endl;
return 0;
}

输出为:
5
6
6
7
6
在23至26行为int型分配了内存空间,并用指针itsAge,itsWeight指向这两个空间。而在29至34的复制构造函数中又为int型重新分配了内存空间,而在这之前即23至26所分配的内存空间并没有释放掉,这样不就是产生了内存泄露吗?
另外52行的意思是不是表示“将frisky的成员变量复制到boots”?
还请大家指点!!!谢谢!
...全文
24 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jinhao 2003-10-21
  • 打赏
  • 举报
回复
23,26,29,34在新的对象中分配的内存,不是的内存泄露

但是你的代码有产生内存泄露的可能!
比如在构造函数的第二个new产生异常,就会导致内存泄露
liao2001 2003-10-21
  • 打赏
  • 举报
回复
没有内存泄漏
拷贝构造和构造用于不同的情况,可以说是互斥的

52行应该是调用了拷贝构造
Hot_Forever 2003-10-21
  • 打赏
  • 举报
回复
没有,这只是2种构造函数,23-26,直接构造,29-34 拷贝构造,按照参数不同运行不同的构造函数,也就是说生成一个对象要么23-26,要么29-34,所以不会有内存泄漏
52行正是调用了拷贝构造函数啊,即用frisky的值来初始化boots,也可以说复制吧

69,338

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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