【发布时间】:2012-11-12 12:29:15
【问题描述】:
我有以下问题:
我有一个班级应该这样做:
Obj o;
Obj o1(o), o1=o; // deep-copies
const Obj c(o), c=o; // deep-copies
const Obj c1(c), c1=c; // shallow-copies
Obj o2(c), o2=c; // deep-copies
如果没有继承,我怎样才能做到这一点? (我的意思是我会做 Const_obj 继承自 Obj 否则。)
编辑:
直接使用o.clone() 不是一种选择,因为这样我很容易通过意外不克隆引入错误。
编辑:
最后,使用Scott Meyers 的Effective C++ 的想法,有一个适当的、完整的懒惰评估解决方案。在下面查看我的答案。
【问题讨论】:
-
我认为您可能需要添加一个 clone() 方法并明确执行您想要的操作。
-
这就是我想要避免的,不要在我的代码中写入难以跟踪的错误。那样很容易。
-
嗯,我认为默默地做这件事要危险得多——尤其是在你换工作和新人进来之后......(我的 2 penneth)
-
您可以使复制构造函数和赋值运算符受保护,因此您将不得不使用“深拷贝”或“浅拷贝”方法
-
@Caribou:它只是一个普通的从外部深度复制的类,但在引擎盖下加速了。仅提供实现细节。
标签: c++ copy-constructor deep-copy shallow-copy