c 拷貝建構函式優缺點

2021-06-26 23:43:43 字數 1147 閱讀 6853

前一段時間去面試,被人問了乙個這個問題, 突然不知道怎麼回答了, 後來查了查,才知道原來是怎麼樣了, 現在總結一下吧。

拷貝建構函式和賦值運算子用於建立物件的副本。在某些情況下由編譯器隱式呼叫拷貝建構函式,例如按值傳遞物件的時候。

優點:拷貝建構函式可以很容易地複製物件。 stl容器要求所有內容可拷貝和賦值。拷貝建構函式可以比copyfrom()式的解決方法更有效,因為它們將構造和複製結合在一起。

缺點:物件的隱式拷貝是c++中是錯誤和效能問題的**之一。它也降低了**的可讀性,並使得物件子程式中的傳遞和改變變得難以跟蹤。

只有很少的類需要拷貝。絕大部分的類既不需要拷貝建構函式,也不需要賦值操作符函式。在大多數情況下,使用指標或引用可以完成相同的任務,並具有更好的效能。例如,可以通過引用或指標,而不是通過值傳遞函式的引數。在stl容器中儲存物件的指標,而不是儲存物件的拷貝。

如果你的類需要拷貝,可以提供用於複製的方法,如copyfrom()或者clone(),而不是使用拷貝建構函式,因為這種方法不能被編譯器隱式呼叫。如果提供的複製方法不夠用,在具體情況下(如效能方面的原因,或者是因為你的類需要按值儲存在stl容器中),考慮同時提供拷貝建構函式和賦值操作符函式。

如果你的類並不需要拷貝建構函式或賦值操作符函式,你必須顯式地禁用它們。要做到這一點,可以在類的私有(private)部分,新增拷貝建構函式和賦值操作符函式的空申明,但不提供任何相應的定義。因此,任何使用它們的企圖都會導致鏈結錯誤(link error)。

為了方便, 可以使用disallow_copy_and_assign巨集:

// a macro to disallow the copy constructor and operator= functions

// this should be used in the private: declarations for a class

#define disallow_copy_and_assign(typename) \

typename(const typename&); \

void operator=(const typename&)

然後在類foo中這樣使用:

class foo ;

這樣就好了

c 拷貝建構函式優缺點

c 拷貝建構函式優缺點 前一段時間去面試,被人問了乙個這個問題,突然不知道怎麼回答了,後來查了查,才知道原來是怎麼樣了,現在總結一下吧。拷貝建構函式和賦值運算子用於建立物件的副本。在某些情況下由編譯器隱式呼叫拷貝建構函式,例如按值傳遞物件的時候。優點 拷貝建構函式可以很容易地複製物件。stl容器要求...

建構函式用途及優缺點

每個物件上面都有乙個constructor屬性 嚴格意義上來說,是原型上的,物件是通過查詢到原型找到 constructor屬性 後面講到原型的時候,我會用示意圖的方式說明。1 function createobj uname 6 7 var obj1 new createobj ghostwu 8...

靜態工廠 vs 建構函式,優缺點

靜態工廠是指用乙個靜態函式返回乙個例項,乙個典型的例子就是graphics類,例如 public static graphics fromhdc intptr hdc public static graphics fromhwnd intptr hwnd public static graphics...