为何“标准容器类不能与拷贝构造函数不执行拷贝的类型合作”?

失落的凡凡 2010-01-24 03:02:04
原贴见http://topic.csdn.net/u/20100123/21/41f23c56-7114-48e8-80cb-4d6b3bda0f47.html?seed=984917720&r=62955982#r_62955982
35楼superlee19提到“标准容器类不能与拷贝构造函数不执行拷贝的类型合作”的原则,我百思不得其解,请superlee19指教。
拷贝构造函数不执行拷贝的意思难道是禁用了拷贝构造函数?
...全文
103 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingstarer 2010-01-24
  • 打赏
  • 举报
回复
因为容器内部会执行复制拷贝

而autr_ptr复制拷贝的行为很古怪
A = B之后A != B
superlee19 2010-01-24
  • 打赏
  • 举报
回复
晕头转向的一天。问题就是越辩越明,能和大家一起讨论也是很幸福的一件事。O(∩_∩)O
cattycat 2010-01-24
  • 打赏
  • 举报
回复
主要是往容器里存对象是要拷贝的,即使是指针也是指针的拷贝,如果不支持拷贝,就不能存进容器了,创建临时对象会失败。
失落的凡凡 2010-01-24
  • 打赏
  • 举报
回复
估计superlee19已经睡了,折腾他到这么晚,真是不好意思。
在这里向你说声谢谢!当然也要谢谢我们imba的版主小桥,提前祝你们新年快乐!
失落的凡凡 2010-01-24
  • 打赏
  • 举报
回复
这个问题已经弄明白了 等superlee19来了就结贴。

今天收获很大啊,学到好多东西。
mstlq 2010-01-24
  • 打赏
  • 举报
回复
百度一下,你就知道
google一下,你知道得太多了……
失落的凡凡 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lqbk1 的回复:]
不明白楼上的意思了>_ <
[/Quote]

我是说 你是样迅速找出这么多文档来的呢?你不会是对每个问题的文档都归了类,做成了个hash map?
lqbk1 2010-01-24
  • 打赏
  • 举报
回复
不明白楼上的意思了>_<
失落的凡凡 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
http://blog.csdn.net/bichenggui/archive/2009/09/19/4571413.aspx
http://topic.csdn.net/u/20080623/09/adc7fc39-87f9-4690-abee-0aaf4623f8c0.html
http://topic.csdn.net/u/20090430/11/5e1373b4-f87f-49a9-b080-98c7cd1d880d.html
[/Quote]
小桥原来你是敏捷+智力型的啊
mstlq 2010-01-24
  • 打赏
  • 举报
回复
可以这么理解……

让楼主通过编译了的话,这个data就失去了std容器的一个基本性质,很多适合std容器的算法什么的都不能保证能正确运作……

当然,如果楼主仅仅是当数组用,还是应该不会出漏子的。
不过,总让人觉得不是那么一回事……
失落的凡凡 2010-01-24
  • 打赏
  • 举报
回复
那也就是说:像我这样在语句,在实质上没有违反这个原则,只是在实现上不允许?

std::vector< std::auto_ptr<T> > data;
T * p = new T;
data.push_back( std::auto_ptr<T>(p) ); //在这一句中 ,push_back的是一个临时对象,是无用的将会被舍弃掉的。

mstlq 2010-01-24
  • 打赏
  • 举报
回复
http://blog.csdn.net/bichenggui/archive/2009/09/19/4571413.aspx
http://topic.csdn.net/u/20080623/09/adc7fc39-87f9-4690-abee-0aaf4623f8c0.html
http://topic.csdn.net/u/20090430/11/5e1373b4-f87f-49a9-b080-98c7cd1d880d.html
失落的凡凡 2010-01-24
  • 打赏
  • 举报
回复
这是superlee19在上面提到的那个贴中的回复:
[Quote=引用 39 楼 superlee19 的回复:]
从字面意思看,拷贝构造函数就是复制一份相同的数据到新的对象,也就是说如类A,有对象x,现在定义
A y=x,y应该与x是等价的,但是auto_ptr在执行拷贝构造后,被拷贝的对象已经丢弃了先前的所有权,所以新对象和被拷贝对象不等价。标准容器在存放的时候实际都是存放的对象副本。
[/Quote]

64,681

社区成员

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

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