c++ - 我可以为 const 和非常量实例编写不同的 copyCtor 吗?

标签 c++ copy-constructor deep-copy shallow-copy

我有以下问题:

我有一个类应该这样做:

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/

相关文章:

python - 我们什么时候应该实现 `__deepcopy__` ?

c++ - 使用 Boost shared_ptr 的嵌入式引用计数

C++: "T a = b"-- 复制构造函数还是赋值运算符?

c++ - 复制构造函数还是赋值运算符?我错过了什么?

javascript - 如何在javascript中深度复制字符串?

java - 如何在复制构造函数中设置深复制?

c++ - 初始化列表 std::pair

C++ 为什么要将某些东西转换为 NaN?

c++ - 从 std::ostream_iterator 调用时未找到运算符 << 的重载?

c++ - 为什么这个构造函数要这样写?