首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

对象作为函数返回值有关问题

2012-03-07 
对象作为函数返回值问题源代码:#include iostream#include cstringusingnamespacestdclassNAME{publi

对象作为函数返回值问题
源代码:
#include <iostream>
#include <cstring>
using   namespace   std;
class   NAME
{
public:
NAME(){cout < < "constructing.\n ";string=new   char[80];}
NAME(const   NAME   &obj){cout < < "copy   constructing.\n ";string=new   char[80];strcpy(string,obj.string);}
~NAME(){cout < < "destructing.\n ";if(string!=NULL)   delete   string;}
void   show(){cout < <string < < "\n ";}
void   set(char   *s){string=new   char[strlen(s)+1];strcpy(string,s);}
private:
char   *string;
};
NAME   get_name()
{
NAME   temp;
char   temp_str[250];
cin> > temp_str;
temp.set(temp_str);
return   temp;
}
int   main()
{
NAME   my;
my=get_name();
                  my.show();
return   0;
}

运行结果是:
constructing.
constructing.
aaaaa
destructing.

destructing.

我用的是vs2005,书上说当对象作为函数返回值,会创建一个临时对象并用拷贝函数初始化,函数调用结束后就被撤销.但运行结果却没调用拷贝函数,是不是并没有创建临时对象啊?我把这两个语句my=get_name();my.show();改为get_name().show();后可以输出aaaaa,但依然没调用拷贝函数,拷贝函数的其中一个用途不是用来生成一个临时对象作为函数返回结果吗?

[解决办法]
你差一个operator=

有一个东西叫做返回值优化.
[解决办法]
加上函数
NAME& operator=( const NAME& OBJ )
{
cout < < "AAAAAAAA constructing.\n ";
string=new char[80];
strcpy(string,OBJ.string);
return *this;
}

热点排行