Re: [問題] 這麼做的目的是??

看板C_and_CPP (C/C++)作者 (stu)時間14年前 (2011/12/22 22:33), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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
恩恩 THANKS
12/22 22:41, 1F

12/23 14:19, , 2F
補充一下, Q2 並非 Singleton, 請參看 GoF Design
12/23 14:19, 2F

12/23 14:20, , 3F
Pattern 的 "Factory Method" pattern
12/23 14:20, 3F

12/23 16:48, , 4F
可是我看他的說法,覺得是singleton的可能性比較大
12/23 16:48, 4F

12/23 16:48, , 5F
如果傳回的是函數內的static物件,或是static類別指標
12/23 16:48, 5F

12/23 16:48, , 6F
那有可能就是singleton
12/23 16:48, 6F
文章代碼(AID): #1Eyp_0HX (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Eyp_0HX (C_and_CPP)