我有以下问题:
我有一个类应该这样做:
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
我怎样才能在没有继承的情况下更好地做到这一点? (我的意思是,否则我会从 Obj
继承 Const_obj
。)
编辑:
直接使用 o.clone()
不是一种选择,因为那样我很容易因不小心不克隆而引入错误。
编辑:
最后,使用来自 Scott Meyers 的 Effective C++ 的想法,有一个适当的、完整的解决方案,其中包含惰性评估。在下面查看我的回答。
最佳答案
不,你不能。
- 构造函数不能是 cv 限定的,因此您不能强制它构造一个 const 对象。
- 函数的返回类型(包括运算符)不是其签名的一部分,因此您不能仅通过更改函数的返回类型来重载函数。
此外,如果可能的话,我会发现它真的令人困惑。只需制定适合您需要的方法,并以明确的方式命名它们即可。
关于c++ - 我可以为 const 和非常量实例编写不同的 copyCtor 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343718/