**********结构的实体名 到底是值还是地址?(比较弱,见笑) temp是值.temp的值会储存在调用TestFun()的函数的栈中. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是吗?那么temp的地址是&temp了!哦,是的,经常这样用。这样理解是不是就可以了(&temp 是地址那么temp就是值了)! 返回的肯定是temp这个对象了,如果你没有重载这个对象的=操作符,这个返回之也没用了.(这种说话有点问题) 是值!其实道理和返回一个整型的一样的。想想怎么返回一个int的吧! to : 回复人:admireO(初学者) (2001-6-22 12:21:00) 得0分 返回的肯定是temp这个对象了,如果你没有重载这个对象的=操作符,这个返回之也没用了.(这种说话有点问题) 什么意思?如果真的不重载这个对象的=操作符就不行吗?好象可以吧! class MyClass{...};MyClass TestFun(){ MyClass temp; ... return temp; // is this ok?}这样肯定是不能实现你的要求,因为错误有二:1、MyClass temp是TestFun()函数的局部变量,该变量在函数返回后将不存在(即被释放掉了!!),2、return temp是不会返回一个类实体的。解决的方法:MyClass *TestFun(){ MyClass *pTemp = new MyClass; // 函数返回后,该实例还有效!! ... return pTemp; // 返回实例的指针!} 两种都可以的class MyClass{...};MyClass TestFun(){ MyClass temp; ... return temp; // is this ok?}MyClass ss=TestFun();内部对象是释放了,但是都拷贝给了接受实例。 在《深入探索c++对象模型》之中说,这个函数会被编译器改成这样:MyClass TestFun(){ MyClass temp; ... return temp; // is this ok?}改成void TestFun(MyClass& _result){ MyClass temp; ... _result=temp; // is this ok?}而象这样的调用:MyClass testclass;testclass=testfun();改成MyClass testclass;testfun(testclass); to:Sunny_lin(大和尚),您的说法肯定有问题!如果按你所说,那么如下的程序正确?int* TestFun(){ int iTmp; ... return &iTmp;}可是这个程序在VC下编译就会给出警告错误! to:Sunny_lin(大和尚):您的说法肯定有问题!如果您说的对,那么下面的函数就对了:int* TestFun(){ int iTmp; ... return &i; //fail!!!!!!}肯定有问题!如果你在VC下编译,就会有警告错误给出! 我的说法肯定正确!!MyClass *pTemp = new MyClass; // 函数返回后,该实例还有效!!这里使用new的目的是在内存中新建一个对象,这个对象将一直存在直到delete该对象,To (剿匪总司令) :int* TestFun(){ int iTmp; ... return &i; //fail!!!!!!}这里的 int iTmp 是存在于堆栈中,TestFun函数返回后,该变量就被释放了(即无效了),因此肯定是错误的!!!To jamesye78(江月):你的说法有问题,按照你的方法,你的类必须有 拷贝构造 方法,否则将会错误。To liu_feng_fly(一只菜鸟,忽忽悠悠的就飞来了!!) :你想使用 _result=temp 来对类付值,那么这个类必须有拷贝构造 ,否则该类必须重载 = 操作符。关于这些内容,在清华大学《C++教程》(不是潭好强的)中有。 正如liu_feng_fly所说, 这个问题在《深入探索c++对象模型》中已经讲的很清楚了. 如果你的类仅仅是一个简单的结构或类(没有虚拟函数,没有虚拟继承,没有指针成员变量), 这样写是完全没有问题的,只不过效率有可能较差(会产生和销毁临时变量). 如果你的类不是一个简单类, 那么要定义你的COPY CONSTRUCTOR 和重载"=". to Sunny_lin(大和尚):你不知道有default copy constructor得吗 to :Sunny_lin(大和尚) 《深入探索c++对象模型》上说,默认的是按位拷贝,这是编译器在需要的时候会自动给你一个,就象构造函数一样 liu_feng_fly说得对!class MyClass{...};MyClass TestFun(){ MyClass temp; ... return temp; // is this ok?}当调用TestFun函数时,编译器同时传了一个MyClass类型结构的指针给它,该指针指向栈中某一块内存,当函数返回时,会将temp的所有内容复制到该指针所指的内存块中返回,所以以上函数是正确的. 对于QQ的在线状态是怎么实现的? 怎样使用在MFC中导出类中的成员函数? 最小化时不显示在任务栏上 大家来帮我看一段代码,谢谢 学习编写高性能服务器有什么好书给介绍一下好吗?? 如何实现视图中的控键的对齐 关于利用pdb进行事后调试的问题 判断一个点是否落在某个区域的api是....? 一个创建字体的问题?? ~~~~~高手请帮忙:哪里有一幅图像的等高线算法的c/c++源代码?~~~~~~~~~ 请问在ATL写的com中如何将dialog里编辑框里的数据传出来啊? 菜鸟提问:请问MSDN在安装和使用时的详细方法。
回复人:admireO(初学者) (2001-6-22 12:21:00) 得0分
返回的肯定是temp这个对象了,如果你没有重载这个对象的=操作符,这个返回之也没用了.(这种说话有点问题) 什么意思?如果真的不重载这个对象的=操作符就不行吗?好象可以吧!
class MyClass
{
...
};
MyClass TestFun()
{
MyClass temp;
...
return temp; // is this ok?
}
这样肯定是不能实现你的要求,因为错误有二:
1、MyClass temp是TestFun()函数的局部变量,该变量在函数返回后将不存在
(即被释放掉了!!),
2、return temp是不会返回一个类实体的。解决的方法:MyClass *TestFun()
{
MyClass *pTemp = new MyClass; // 函数返回后,该实例还有效!! ...
return pTemp; // 返回实例的指针!
}
class MyClass
{
...
};
MyClass TestFun()
{
MyClass temp;
...
return temp; // is this ok?
}
MyClass ss=TestFun();
内部对象是释放了,但是都拷贝给了接受实例。
MyClass TestFun()
{
MyClass temp;
...
return temp; // is this ok?
}
改成
void TestFun(MyClass& _result)
{
MyClass temp;
...
_result=temp; // is this ok?
}
而象这样的调用:
MyClass testclass;
testclass=testfun();
改成
MyClass testclass;
testfun(testclass);
您的说法肯定有问题!如果按你所说,那么如下的程序正确?
int* TestFun()
{
int iTmp;
...
return &iTmp;
}可是这个程序在VC下编译就会给出警告错误!
您的说法肯定有问题!如果您说的对,那么下面的函数就对了:int* TestFun()
{
int iTmp;
...
return &i; //fail!!!!!!
}肯定有问题!如果你在VC下编译,就会有警告错误给出!
这里使用new的目的是在内存中新建一个对象,这个对象将一直存在直到delete该对象,To (剿匪总司令) :
int* TestFun()
{
int iTmp;
...
return &i; //fail!!!!!!
}这里的 int iTmp 是存在于堆栈中,TestFun函数返回后,该变量就被释放了(即无效了)
,因此肯定是错误的!!!
To jamesye78(江月):
你的说法有问题,按照你的方法,你的类必须有 拷贝构造 方法,否则将会错误。To liu_feng_fly(一只菜鸟,忽忽悠悠的就飞来了!!) :你想使用 _result=temp 来对类付值,那么这个类必须有拷贝构造 ,
否则该类必须重载 = 操作符。
关于这些内容,在清华大学《C++教程》(不是潭好强的)中有。
to Sunny_lin(大和尚):
你不知道有default copy constructor得吗
《深入探索c++对象模型》上说,默认的是按位拷贝,这是编译器在需要的时候会自动给你一个,就象构造函数一样
class MyClass
{
...
};MyClass TestFun()
{
MyClass temp;
...
return temp; // is this ok?
}
当调用TestFun函数时,编译器同时传了一个MyClass类型结构的指针给它,
该指针指向栈中某一块内存,当函数返回时,会将temp的所有内容复制到该指针所
指的内存块中返回,所以以上函数是正确的.