Re: [問題] 這麼做的目的是??
※ 引述《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)
推
12/22 22:41, , 1F
12/22 22:41, 1F
→
12/23 14:19, , 2F
12/23 14:19, 2F
→
12/23 14:20, , 3F
12/23 14:20, 3F
→
12/23 16:48, , 4F
12/23 16:48, 4F
→
12/23 16:48, , 5F
12/23 16:48, 5F
→
12/23 16:48, , 6F
12/23 16:48, 6F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章