程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 《Effective C++》讀書筆記06:如果不要編譯器自動生成的函數,就明確拒絕

《Effective C++》讀書筆記06:如果不要編譯器自動生成的函數,就明確拒絕

編輯:關於C++

有時候,我們需要定義一些獨一無二的類,這些類是如此的特別,以至於我們不能將 其拷貝或者賦值:

1 class Family {};
2
3 Family mine;
4 Family your;
5 Family her(mine);//不能通過編譯
6 mine = your;     //也不能通過

可是上一個專題講到,即使我們不定義copy構造函數和copy assignment函數,編譯器 還是會自動定義它們,所以,為了阻止上述行為,我們一般的解決方法就是:
1 class Family
2 {
3 public:
4
5 private:
6   Family(const Family&);  //我們將其定義在private中
7   Family& operator=(const Family&); //並且故意不實現它們:)
8 }

這樣,如果用戶無意中調用它們,就會在編譯期間得到錯誤。而如果你在member函數 和friend函數中調用,則會是連接器發出抱怨;

也可以將連接期間的問題移到編譯期間,可以這麼做:

1 class Uncopyable
 2 {
 3 protected:
 4   Uncopyable() {};
 5   ~Uncopyable() {};
 6 private:
 7   Uncopyable(const Uncopyable&); //阻止copy
 8   Uncopyable& operator=(const Uncopyalbe&);  //阻止
 9 };
10
11 class Family: private Uncopyable //繼承以後就完成了
12 {
13
14 };

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved