Skip to content

Commit

Permalink
[faq] 替换 rule of 3/5/0 为整理后的解答文档
Browse files Browse the repository at this point in the history
  • Loading branch information
FeignClaims committed Jan 31, 2024
1 parent 0831303 commit 5ed890a
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions docs/faq/copy_assignment_define/main.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@
copy-and-swap: 拷贝赋值函数的简单实现
************************************************************************************************************************

.. TODO
首先明确一点: **如果没有必要定义拷贝构造/赋值函数/析构函数, 就不要定义**, 让编译器为你声明甚至定义. 这里的逻辑相关解释参考 `[运行时错误] 拷贝后发生释放错误 <https://gitee.com/cpp_tutorial/question/issues/I7GJ0R>`_.
首先明确一点: :doc:`如果没有必要定义拷贝构造函数/拷贝赋值函数/析构函数, 就不要定义 </faq/rule_of_350/main>`, 让编译器为你声明甚至定义.

如果有定义的需求, 且拷贝仅仅是拷贝, 不是因为题目而有输出之类的特殊要求, 则可以先定义拷贝构造函数、析构函数, 然后利用它们定义拷贝赋值函数, 这称为 copy-and-swap 惯用法.

Expand All @@ -16,6 +14,11 @@ copy-and-swap: 拷贝赋值函数的简单实现
return *this;
} // temp 的析构函数将会对交换来的 *this 内容完成必要的清理
.. admonition:: 相关核心准则

- :coreguidelines:`C.22: 让特殊函数保持一致 <c22-make-default-operations-consistent>`
- :coreguidelines:`C.60: 拷贝赋值函数应该是非虚函数, 按 const& 传参, 并按 & 返回自身 <c60-make-copy-assignment-non-virtual-take-the-parameter-by-const-and-return-by-non-const>`

========================================================================================================================
示例
========================================================================================================================
Expand Down

0 comments on commit 5ed890a

Please sign in to comment.