[英]Why not a consolidated Copy constructor and Assignment operator available in C++?
[英]Why would I make copy constructor and assignment operator private and implemented in C++?
我的猜測是,這對於持有自己列表的類很有用 - 然后它可以在內部復制實例。 這實際上只對作為項和容器的類有用:
class MyItems
{
private:
/* Copy ctor and =operator */
List list;
public:
void AddItems(MyItems* items)
{
MyItems* added = new MyItems(items);
list.Add(added);
}
};
另一個想法是允許在班級控制的情況下進行克隆。 當復制有意義時,這可能很有用,但僅限於特定條件或權限:
class MyClass
{
private:
/* Copy ctor and =operator */
public:
MyClass* clone()
{
if (canClone)
{
MyClass* cloned = new MyClass(this);
return cloned;
}
else
{
return NULL;
}
}
};
有兩種情況立即浮現在腦海中:
friend
:
比方說,作為你設計的一部分,你有兩個高度耦合的類,其中一個需要能夠復制另一個(比如,在工廠模型或其他類似),但你不想讓整個世界成為能夠復制它。
包裝:
假設您希望能夠有條件地克隆某些元素,具體取決於某些內部行為(例如,取決於某些類狀態條件) - 從語言角度來看,最簡潔的方法仍然是將復制分離為自己的函數。 這樣可以很好地分離關注點。
operator =
未實現,以便即使是friend
也無法訪問它。 如果您實施,則意味着您希望friend
有權訪問。 這是一個設計決定。 例如
class A {
A(const A& obj) { ... }
A& operator = (const A& obj) { ... }
public:
A& clone(const A& obj)
{
*this = obj;
return *this;
}
};
我們已經使用這個包裝器clone()
來允許用戶進行克隆,但是它也明確地顯示了他/她正在做什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.