拷贝构造的问题

siemun 2011-10-01 11:38:04
#include <iostream.h>

class X{
public:
X(int);
X(X&);
~X();
};

X::X(int s){ cout <<"create a X object with " <<s <<endl; }
X::X(X& x){ cout <<"create a X object from other X object\n"; }
X::~X(){ cout <<"erase a object\n"; }

void f(X x)
{
cout <<"call a func with para X object\n";
return ;
}

int main()
{
X a(1);
f(a);//这里执行了拷贝构造,没有问题
f(X(2);//这里没有执行拷贝构造,VC,为什么?
return 0;
}
...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
siemun 2011-10-01
  • 打赏
  • 举报
回复
没有拷贝呀:再简化一下VC6
int main()
{
//X a(1);
//f(a);
f(X(2));
return 0;
}
MyLiveIsLost 2011-10-01
  • 打赏
  • 举报
回复
嗯,就少了那个括号而已!编译通过,可以拷贝
MyLiveIsLost 2011-10-01
  • 打赏
  • 举报
回复
f(X(2));//这里没有执行拷贝构造,VC,为什么?

少了个括号;你直接把整型值转换成你的类类型是不行的
siemun 2011-10-01
  • 打赏
  • 举报
回复
明白!
chelp 2011-10-01
  • 打赏
  • 举报
回复
f(a);//这里执行了拷贝构造,Xx =a;
f(X(2);//这里没有执行拷贝构造,X x(2);


chelp 2011-10-01
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
class X{
public:int y;
X(int);
X(X&);
~X();
};

X::X(int s){ y=s;cout <<"构造函数create a X object with " <<y<<endl; }
X::X(X& x){y=x.y; cout <<"拷贝构造函数create a X object from other X object"<<y<<endl; }
X::~X(){ cout <<"erase a object\n"; }

void f(X x)
{
cout <<"call a func with para X object"<<x.y<<endl;
return ;
}

int main()
{
X b(3);
X a=b;//调用拷贝构造函数

X s(0);
s=b;//再次赋值,不调用拷贝构造函数
cout<<a.y<<endl;
;


f(X(2));//等价于再次赋值

return 0;
}
qq120848369 2011-10-01
  • 打赏
  • 举报
回复
编译器已帮你优化掉拷贝构造。
caddor 2011-10-01
  • 打赏
  • 举报
回复
++ 这样的话,是不会调用拷贝构造函数的


[Quote=引用 4 楼 lee_09 的回复:]

X(2)直接在f(X x)的参数x的目标内存单元构造对象,不用拷贝
[/Quote]
lee_09 2011-10-01
  • 打赏
  • 举报
回复
X(2)直接在f(X x)的参数x的目标内存单元构造对象,不用拷贝

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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