From 5ed890ad43b7f64e705c45c254f6498997a1a527 Mon Sep 17 00:00:00 2001 From: FeignClaims Date: Wed, 31 Jan 2024 23:39:51 +0800 Subject: [PATCH] =?UTF-8?q?[faq]=20=E6=9B=BF=E6=8D=A2=20rule=20of=203/5/0?= =?UTF-8?q?=20=E4=B8=BA=E6=95=B4=E7=90=86=E5=90=8E=E7=9A=84=E8=A7=A3?= =?UTF-8?q?=E7=AD=94=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/faq/copy_assignment_define/main.rst | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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& 传参, 并按 & 返回自身 ` + ======================================================================================================================== 示例 ========================================================================================================================