Effective C 之構造,拷貝函式

2021-08-28 00:09:00 字數 625 閱讀 6823

3.條款之不使用預設生成的函式,應該明確拒絕

我們知道c++類會幫我們自動生成建構函式,析構函式函式,拷貝建構函式,和賦值函式

#include using namespace std;

class homeclass{};

int main(int argc,char *argv)

以下**是可以通過,也符合c++準則,但是當我們不使用這些函式的時候

方法1.可以把他們宣告為私有函式:

class homeclass;

此處不加引數名,是因為我們本來就不想讓他們實現,加引數名無意義

方法2.方法1雖然這樣做,但是不足夠安全,因為在member函式或frind函式還是可以呼叫我們的私有函式

class uncopy;

class homeclass:private uncopy;

此規則:為了駁回編譯器自動生成的機能,可對成員函式宣告為private不予實現。使用像uncpoy這樣的base class也是一種做法。

參考文獻《effective c++》作者 scott meyers 翻譯 候捷

拷貝控制之拷貝建構函式

當我們定義乙個類的時候。我們通常會顯式或隱式的指定在此類的物件在建立 移動 銷毀的時候要做些什麼。乙個類通常通過定義五種特殊的成員函式來控制這些操作 拷貝建構函式 拷貝賦值運算子 移動建構函式 移動賦值運算子 析構函式。如果我們沒有定義這些成員函式,編譯器會自動定義些缺失的操作。有時也會造成些意想不...

C 拷貝建構函式之深拷貝 淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。執行程式,螢幕輸出100。從以上 的執行結果可以看出,系統為物件b分配了記憶體並完成了與物件a的複製過程。就...

拷貝建構函式之深拷貝與淺拷貝

若採用系統預設的拷貝建構函式,為淺拷貝,對於指著型資料,會存在共同指向乙個位址空間,若p2析構時刪除了位址空間,那麼p1析構時,系統就會崩潰 所以要用new重新開闢乙個位址空間,成為深拷貝 include stdafx.h include using namespace std class pers...