新手问题,请解惑?

PrettyMurphy 2012-03-28 10:46:48
#include "stdafx.h"
#include <iostream>

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


class CTest
{
protected:
int XX;
int YY;

public:

CTest operator+(const CTest& ATest)
{
return CTest(XX + ATest.XX, YY + ATest.YY);
};

int DoSum(void)
{
return XX + YY;
};


CTest(int X, int Y)
{
XX = X;
YY = Y;
};

};


int _tmain(int argc, _TCHAR* argv[])
{
CTest aTest(100, 200);

CTest bTest(200, 300);

CTest dTest(0, 0);

CTest* eTest = NULL;

dTest = aTest + bTest; //原来的dTest是不是被丢弃了?

eTest = &(aTest + bTest);

cout << "aTest.DoSum = " << aTest.DoSum() << endl;
cout << "bTest.DoSum = " << bTest.DoSum() << endl;
cout << "dTest.DoSum = " << dTest.DoSum() << endl;
cout << "eTest.DoSum = " << (*eTest).DoSum() << endl;

return 0;
}


问题:

dTest是不是重复创建了?原来的dTest是不是丢了?如果不想用*dTest的指针方法,还有没其它方法来比较方便一点?
...全文
78 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi66 2012-03-28
  • 打赏
  • 举报
回复
如果使用了动态分配,那new了就必须要delete,否则就会造成泄漏。
PrettyMurphy 2012-03-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

内存泄露只存在于动态内存分配的错误里。你这里没有使用动态内存分配,所以不会泄露。
[/Quote]

嗯,如果对象中存在动态的内存分配,这样写那肯定是会有问题的对吧,那除了*dTest赋值的方法,还有其它方法吗?
muyi66 2012-03-28
  • 打赏
  • 举报
回复
内存泄露只存在于动态内存分配的错误里。你这里没有使用动态内存分配,所以不会泄露。
muyi66 2012-03-28
  • 打赏
  • 举报
回复
对象赋值是用的传值覆盖的方式,所以你的第一个对象是被覆盖掉了,但是它占据的存储空间没有变,只是被新对象占据了。
PrettyMurphy 2012-03-28
  • 打赏
  • 举报
回复
为什么不是重复创建呢?

CTest dTest(0, 0); //这里已经创建了一个CTEST对象。

dTest = aTest + bTest; //运算符重载的时候,也是重新构造对象再赋值的,那前面的对象是不是没指针指向了?
PrettyMurphy 2012-03-28
  • 打赏
  • 举报
回复
现在dTest里面只是包含几个简单变量,如果有内存需要析构的话,是不是这样就会导致内存泄漏了?
pengzhixi 2012-03-28
  • 打赏
  • 举报
回复
dTest没有重复创建,而是说里面的数据成员被赋予了新值。调用的operator=
muyi66 2012-03-28
  • 打赏
  • 举报
回复
不是重复创建,只是用新的值取代了旧的。

64,281

社区成员

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

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