我正在爲遊戲創建一個gui api。例如,我爲每個小部件以Font *形式提供了一個字體。現在我擁有它,所以我從來不管理這些內存(出於顯而易見的原因),因爲我認爲如果用戶希望管理內存,用戶可以使用智能指針。對此的認可是它不是非常愚蠢的證據。如果用戶像這樣設置字體:傳遞指向類的指針時,誰應該管理資源?
obj.setFont(new Font(""));
這會立即導致內存泄漏,因爲沒有人會釋放它。唯一的方法是刪除getFont();
對我來說管理這些會更好嗎?
感謝
我正在爲遊戲創建一個gui api。例如,我爲每個小部件以Font *形式提供了一個字體。現在我擁有它,所以我從來不管理這些內存(出於顯而易見的原因),因爲我認爲如果用戶希望管理內存,用戶可以使用智能指針。對此的認可是它不是非常愚蠢的證據。如果用戶像這樣設置字體:傳遞指向類的指針時,誰應該管理資源?
obj.setFont(new Font(""));
這會立即導致內存泄漏,因爲沒有人會釋放它。唯一的方法是刪除getFont();
對我來說管理這些會更好嗎?
感謝
它應該是來電者的責任管理是主叫方的範圍內的對象的內存。
話雖這麼說,在這種情況下,你應該使用智能指針,因爲他們會收回自己,當他們不再使用。
對指針的const引用? – jmasterx 2010-11-24 15:53:25
這就是所有權轉讓的問題。
但:您可以將接口改寫爲
void obj.setFont(SmartPtr<Font> font);
,因爲那時你正迫使用戶使用智能指針。
這是你的決定,如果您的圖書館應採取資源的所有權,但無論你選擇,使其通過界面清晰(而不是僅僅通過評論或文檔)。
std::auto_ptr
:客戶端將毫無疑問,他將所有權轉移不管怎樣,去爲智能指針可能會帶着這些問題有所幫助。
每常量引用獲取參數在可能的情況,在其他地方使用智能指針,定義什麼情況下什麼其他情況下(即如何定義對象的壽命)認真擁有。 – gimpf 2010-11-24 15:49:11
你不能對某人輸入這個內容負責:`obj.setFont(new Font(「」));`不僅僅是你可以爲某人在自己的一行上輸入新的Font(「」);`負責。 – 2010-11-24 15:56:23