作者iamstudent (stu)
看板C_and_CPP
標題Re: [問題] 這麼做的目的是??
時間Thu Dec 22 22:33:33 2011
※ 引述《pracinverse (改)》之銘言:
: 最近再TRACE別人寫的程式,有些技巧不是很懂
: Q1. 若某個class有成員設為protected或是destructor設為virtual,
: 表示這個class是希望用來被繼承的???
是
後者是個很大的特徵
: Q2. 若某個class把constructor設為private,通常會有另一個public的member function
: 用來產生並回傳該class的instance,這麼做的目的是???
: 用來實做singleton嗎???
是
也可能用來管理產生的實體個數
但是這可能比較接近factory
總之
使用該物件時
除了使用該函數之外
無法產生出該物件的實體
因而只有一種產生該物件的方法
: Q3. 若某個class把destructor設為private,通常會另外設有friend class,
: 透過friend class替該class做cleanup的動作???
: 這麼做有什麼好處呢???
編譯器如果用到destructor就會產生error
強迫使用者編寫進行清理資源的動作
不過這一點感覺只對local自動變數有用
如果使用者使用new出的指標,但是卻忘記delete
似乎無法防範
: Q4. 有些class會把copy constructor和assignment設為private
: 是為了不想讓該class的instance做assign的動作,
: 在甚麼樣的情況之下,我們會不希望class的instance assign給其他instance呢???
該物件所持有的資源不應該被複製的時候
例如裡面有個代表某種硬體資源的ID
或是系統的鎖
也許這類class可以寫成像是auto ptr那樣
從operator上設計
把指揮交給另外一個物件
原本物件則失去對資源的持有
不然就乾脆禁止複製
把copy constructor和assignment設為private
沒有函數的實體定義也無所謂
反正不給用
用到就靠compile error擋住
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.210.62
※ 編輯: iamstudent 來自: 140.113.210.62 (12/22 22:36)
推 pracinverse:恩恩 THANKS 12/22 22:41
→ adrianshum:補充一下, Q2 並非 Singleton, 請參看 GoF Design 12/23 14:19
→ adrianshum:Pattern 的 "Factory Method" pattern 12/23 14:20
→ iamstudent:可是我看他的說法,覺得是singleton的可能性比較大 12/23 16:48
→ iamstudent:如果傳回的是函數內的static物件,或是static類別指標 12/23 16:48
→ iamstudent:那有可能就是singleton 12/23 16:48