[英]When is copy-and-swap idiom not applicable
描述賦值運算符的潛在實現的鏈接將class_name& class_name::operator=(class_name)
為:
可以使用復制和交換習慣用法時復制賦值運算符的典型聲明
並且class_name& class_name::operator=(const class_name&)
as:
當不能使用復制和交換習慣用法時,復制賦值運算符的典型聲明
基本上我們總是希望在可能的情況下使用復制和交換,正如您在鏈接問題的優秀答案中所提到的那樣,因為它將通過自我指派測試。
所以現在問題是為什么會議在http://www.cppreference.com上提到了?
假設我正在為虛擬類實現一個復制構造函數,我想向任何繼承他們應該使用復制和交換習慣用法的人說清楚。 我該怎么辦? 我可以通過在初始調用中為他們復制來幫助他們:
class_name& class_name::operator=(class_name)
這是一個按值復制的,所以任何子類的實現者都會看到我已經為它們制作了副本,所以他們需要做的只是交換。
現在,如果我有一個包含無法復制構造的成員的class_name
,例如,如果我的類具有unique_ptr
,使其無法復制構造,該怎么辦? 我可以指出, 不通過賦值運算符的值參數進行復制,例如:
class_name& class_name::operator(const class_name&)
表明它將在任何子類的實現者上,以確保進行足夠的檢查以通過自我分配測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.