返回对象问题
class CObjTest
{
public:
CObjTest(char* cInput)
{
str = new char[strlen(cInput)+1];
strcpy( str, cInput );
}
CObjTest(const CObjTest& other)
{
str = new char[strlen(other.str)+1];
strcpy( str, other.str );
}
~CObjTest()
{
cout < < "Deconstructor " < < endl;
delete[] str;
}
char* str;
};
CObjTest Fun()
{
CObjTest objTemp( "bb ");
strcpy(objTemp.str, "aa ");
return objTemp;
}
int _tmain(int argc, _TCHAR* argv[])
{
//1
CObjTest objReturn1( "dd ");
objReturn1 = Fun();
//2
CObjTest objReturn = Fun();
return 0;
}
请问1与2的区别在哪里?2能够成功返回,而1不行。
并且1比2多调用一次构造函数和析构函数。为什么?
请各位大虾帮帮忙啊!谢谢!
[解决办法]
因为你的 CObjTest 没有重载 operator=, 而系统默认生成的是完全错误的。
[解决办法]
CObjTest(const CObjTest& other)
{
str = new char[strlen(other.str)+1];
strcpy( str, other.str );
}
==================
拷贝构造函数,你提供了深拷贝的实现,所以ok
赋值操作符系统提供的,按位拷贝,所以指针执行相同内存块
注意悬垂指针
[解决办法]
1程序段调用了三次构造函数,在创建OBJRETURN1对象调用一次,FUN()函数创建objtemp调用了一次,在返回OBJtemp时,由于赋值语句objreturn1=&objtemp;造成复制构造函数的调用,所以1处一共调用了三次构造寒素。而2程序段没有一开始就创建OBJRETURN对象,而是通过赋值=对其创建的,因此少调用一次构造函数。
程序段在析构是会出现问题的~~~
返回对象有关问题
返回对象问题classCObjTest{public:CObjTest(char*cInput){strnewchar[strlen(cInput)+1]strcpy(str,cIn
