看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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