簡體   English   中英

分配運算符重載和自我分配

[英]Assignment Operator Overloading and Self Assignment

我試圖理解為什么在'='重載中我必須檢查自我賦值。我想我知道答案,這是因為循環不斷,但我不明白為什么循環開始了。

范例:

Point p1(3,5);
p1 = p1 ;

這與無休止的遞歸無關,至少通常不是這樣。 自我分配的常見問題是,當您嘗試在復制另一個對象的資源之前銷毀自己擁有的資源時:如果該對象實際上是相同的,則該資源將丟失。

struct Object {
    std::unique_ptr<Resource> _resource;

    Object &operator = (Object const &other) {
        _resource = nullptr;                // Destroy "my" resource
        _resource = clone(other._resource); // Nothing to clone anymore...
    }
};

該示例是人為設計的:沒有人會先重置一個指針, 然后再分配它。 但是這種模式在較早的C ++中突然出現,並且是“當心自我分配”建議的起源。

沒有循環。 當您擁有一些分配的內存之類的資源時,可能會發生什么。

如果您在某些數據上具有共享指針。 在分配過程中,您要做的第一件事是取消分配本地數據。 然后,將其替換為來自另一個對象的數據。 如果它們相同,那么您將失去資源。

解決方案是檢查自我分配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM