为复制构造函数和复制赋值运算符编写一个通用函数
在编程中,复制构造函数和复制赋值运算符经常共享一个函数其实施的重要部分。这种相似性引发了一个问题:我们可以将它们的功能合并到一个通用函数中吗?
通用函数方法
是的,可以创建一个处理复制构造函数和复制赋值运算符。方法如下:
选项 1:显式运算符 = 从复制构造函数调用(不鼓励)
MyClass(const MyClass& other) { operator=(other); }
但是,不建议使用此方法,因为:
选项 2:复制和交换成语
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
复制和交换习语提供了几个优点:
交换函数注意事项
使用“真正的”交换函数来直接交换内部而不依赖于复制构造函数或复制赋值运算符是至关重要的。成员交换或使用带有基本类型和指针的 std::swap 通常是合适的。
以上是一个通用函数可以同时替代复制构造函数和复制赋值运算符吗?的详细内容。更多信息请关注PHP中文网其他相关文章!