求个错误代码

zcdabing 2014-06-04 06:23:18
求个代码。可以反驳
“类中没定义复制构造,编译器会为你生成一个复制构造函数”这句话

因为我知道,编译器生成的复制构造函数,不是给你用的,而是给编译器用

求个错误代码
...全文
97 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2014-06-05
  • 打赏
  • 举报
回复
对于我来说,这只是个实现的问题,只要没有深拷贝,你想怎么样随你。
buyong 2014-06-05
  • 打赏
  • 举报
回复
C++ prime
zcdabing 2014-06-05
  • 打赏
  • 举报
回复
没有自己定义复制构造函数会报错的这种现象,不知道有没有见过呢
引用 2 楼 ForestDB 的回复:
对于我来说,这只是个实现的问题,只要没有深拷贝,你想怎么样随你。
zcdabing 2014-06-05
  • 打赏
  • 举报
回复
引用 3 楼 vcgaoshou 的回复:
"因为我知道,编译器生成的复制构造函数,不是给你用的,而是给编译器用的" 编译器是不要用复制构造函数,是你自己编写的程序中的类需要复制构造函数,因为你的程序中没有为类定义复制构造函数,所以编译程序在编译你的源程序时,就为你的类生成一个复制构造函数,只是这个复制构造函数只能完成类对象的“浅复制”->对应成员复制。因此,当程序中的类的构造函数中有new操作时,这个浅复制”的复制构造函数就显得无能为力了,这时,你就必须自定义完成“深复制”的复制构造函数。
你说的这个我知道,我见过一个这样的错误

class A
{
public:
	int m_int;
	double m_double;
	C m_c;
};

A func()
{
	A a;
	return a;//这里会使用复制构造,但是类A不符合自动生成为程序所用的复制构造,没有复制构造会报错
                     //这里是打个比方,这段程序是不报错 的
}

int _tmain(int argc, _TCHAR* argv[])
{

	A aa=func();

	return 0;
}
zcdabing 2014-06-05
  • 打赏
  • 举报
回复
引用 1 楼 oYinGui1 的回复:
你也可以主动调用。编译器给你默认生成的复制构造只是简单的把值复制过去。不存在深复制这种东西,要是对于复制构造有特殊要求还是得自己写,不然单纯复制值还不如不写。
就算是简单的把值赋过去,编译连接还是没有错误的,只是有时不按照你的意思复制就是了,我想要个会报错的,我见到过这种错误,可是自己重现不了
vcgaoshou 2014-06-05
  • 打赏
  • 举报
回复
"因为我知道,编译器生成的复制构造函数,不是给你用的,而是给编译器用的" 编译器是不要用复制构造函数,是你自己编写的程序中的类需要复制构造函数,因为你的程序中没有为类定义复制构造函数,所以编译程序在编译你的源程序时,就为你的类生成一个复制构造函数,只是这个复制构造函数只能完成类对象的“浅复制”->对应成员复制。因此,当程序中的类的构造函数中有new操作时,这个浅复制”的复制构造函数就显得无能为力了,这时,你就必须自定义完成“深复制”的复制构造函数。
Morrisss_ 2014-06-04
  • 打赏
  • 举报
回复
你也可以主动调用。编译器给你默认生成的复制构造只是简单的把值复制过去。不存在深复制这种东西,要是对于复制构造有特殊要求还是得自己写,不然单纯复制值还不如不写。

64,682

社区成员

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

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