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...