diff --git a/docs/faq/copy_assignment_define/main.rst b/docs/faq/copy_assignment_define/main.rst index 06215f5b..817e604b 100644 --- a/docs/faq/copy_assignment_define/main.rst +++ b/docs/faq/copy_assignment_define/main.rst @@ -2,9 +2,7 @@ copy-and-swap: 拷贝赋值函数的简单实现 ************************************************************************************************************************ -.. TODO - -首先明确一点: **如果没有必要定义拷贝构造/赋值函数/析构函数, 就不要定义**, 让编译器为你声明甚至定义. 这里的逻辑相关解释参考 `[运行时错误] 拷贝后发生释放错误 `_. +首先明确一点: :doc:`如果没有必要定义拷贝构造函数/拷贝赋值函数/析构函数, 就不要定义 `, 让编译器为你声明甚至定义. 如果有定义的需求, 且拷贝仅仅是拷贝, 不是因为题目而有输出之类的特殊要求, 则可以先定义拷贝构造函数、析构函数, 然后利用它们定义拷贝赋值函数, 这称为 copy-and-swap 惯用法. @@ -16,6 +14,11 @@ copy-and-swap: 拷贝赋值函数的简单实现 return *this; } // temp 的析构函数将会对交换来的 *this 内容完成必要的清理 +.. admonition:: 相关核心准则 + + - :coreguidelines:`C.22: 让特殊函数保持一致 ` + - :coreguidelines:`C.60: 拷贝赋值函数应该是非虚函数, 按 const& 传参, 并按 & 返回自身 ` + ======================================================================================================================== 示例 ========================================================================================================================