新手问题 请执教

wdxtn 2005-12-07 01:18:46
// ch10.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;







class Counter
{
public:
Counter()
{
this->value=0;
}
~Counter()
{

}
int GetValue()
{
return this->value;
}
void SetValue(int value)
{
this->value=value;
}
void Increcement()
{
++value;
}
Counter operator++()
{
++value;
Counter temp;
temp.SetValue(value); //这里返回临时对象是不是不安全?到底怎么不安全?程序为什么还能正常运行?谢谢
return temp;
}
protected:
private:
int value;
};


int _tmain(int argc, _TCHAR* argv[])
{
Counter i;
cout<<i.GetValue()<<endl;
i.Increcement();
cout<<i.GetValue()<<endl;
++i;
cout<<i.GetValue()<<endl;
Counter a=++i;
cout<<a.GetValue()<<endl;
cout<<i.GetValue()<<endl;
return 0;
}
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mi_Bo 2005-12-08
  • 打赏
  • 举报
回复
返回一个类对象时,如果返回类型不是引用,会调用一次析构函数和一次构造函数,析构函数是函数体内的局部变量被撤消时调用,构造函数是在实参赋值给形参时,又重新构造一个对象,这个对象是返回的对象,而原来在函数内的局部变量被撤消,这个新对象是copy原来的局部变量的。返回值是这样,参数也是一样的,所以有时候为了防止在参数传递过程中调用构造函数,就把参数设置成引用。
商科程序员 2005-12-07
  • 打赏
  • 举报
回复
Counter operator++()
{
++value;
Counter temp;
temp.SetValue(value); //这里返回临时对象是不是不安全?
//到底怎么不安全?程序为什么还能正常运行?谢谢
return temp;
}


不知以上解释对不对:
因为temp是一个临时创建的变量,作用域只是在这个程序中.
返回时是返回了temp类对象.但是它已经被系统标志为没用.
以后在分配内存时可能被覆盖.
我想你正确运行是因为内存分配较少,没有被覆盖吧.
xiaocai0001 2005-12-07
  • 打赏
  • 举报
回复
从哪看出它是不安全的

我只看出来, 你实现的前缀++运算是不符合常规的.

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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