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

C++复制构造函数的调用中的有关问题

2012-04-11 
C++复制构造函数的调用中的问题?先上程序吧!class point{public:point(int X0,int Y0)point(point &p)

C++复制构造函数的调用中的问题?
先上程序吧!
class point 
{
public:
point(int X=0,int Y=0);
point(point &p);
~point();
void dispaly() const;
private:
int x,y;
};
point fun()
{
point a(1,2);
return a;
}
int main()
{
point c(1,1);
point b=fun();
  return 0;
}
在fun()函数执行完之后,fun()里的a就要销毁,但是在销毁之前会生成一个无名对象,然后把a的值复制给这个无名对象,在这调用了一次复制构造函数。但是在声明并初始化b的时候,是有这个无名对象去初始化b,应该还要调用一次复制构造函数,但是在系统上怎么只调用了一次。求高人指点。谢谢!

[解决办法]
参考
ISO/IEC 14882:2003(E)
12.8 Copying class objects
第15条款


[解决办法]
你没搞懂copy constructor和equal operator的区别啊。。。
[解决办法]
返回值优化,优化掉了一次.
不要写依赖优化和非优化复制次数的代码
[解决办法]
拷贝构造函数和赋值函数
[解决办法]
NRV优化
差不多会是这个样子void foo(xx& oo)
[解决办法]

探讨
先上程序吧!
class point 
{
public:
point(int X=0,int Y=0);
point(point &p);
~point();
void dispaly() const;
private:
int x,y;
};
point fun()
{
point a(1,2);
return a;
}
在fun()函数执行完之后,fun()里的a就要销毁,但是在销毁之前会生成一个无名对象,然后把a的值复制给这个无名对象,在这调用了一次复制构造函数。但是在声明并初始化b的时候,是有这个无名对象去初始化b,应该还要调用一次复制构造函数,但是在系统上怎么只调用了一次。求高人指点。谢谢!

[解决办法]
调用拷贝构造函数要满足两个条件:
1.是用一个对象去初始化另一个对象(包含嵌套类情况)。
2.被初始化的对象未被构造。
[解决办法]
无名对象去初始化b时,对象b已经存在所以不会调用构造/拷贝构造函数,调用的是赋值函数。



对吗??????




b也是拷贝构造






探讨

引用:
先上程序吧!
class point
{
public:
point(int X=0,int Y=0);
point(point &p);
~point();
void dispaly() const;
private:
int x,y;
};
point fun()
{
point a(1,2);
re……

热点排行