考慮下面的需求,從配置檔案中,讀取一些資料,這些資料放到一個集合中,擷取集合,使用方法A,完成任務。該怎麼做?
1、首先明确一點,堅決不能讓A傳回引用。
2、方法A在棧上建立集合,傳回集合。不存在記憶體洩漏的問題,但是要付出copy代價。
3、方法A在堆上建立集合,傳回集合的指針,copy代價很低,但是會存在記憶體洩漏的問題。
4、主調方法建立一個集合,把集合的引用傳遞給被調方法A,A修改集合的内容。這個不直覺,客戶要一些東西,方法A要求客戶準備一個容器,A在容器中填充内容。
5、采用哪種方法,要看具體的使用場景,如果集合内容很小,copy代價小,就不要用指針,否者用指針。
6、還要考慮另外一種情況,傳回的集合是要客戶維護,還是A維護。比如,客戶在一個循環中,每次都需要集合,這就會導緻A重複讀取配置檔案。解決這個問題的辦法是:客戶在循環之前,先把集合儲存起來。但是,考慮下面的情況,程式中很多地方,不同的客戶,都需要這個集合,那麼方法A應該維護集合,讀取一次,内部儲存起來,下次客戶再申請,直接傳回就行了。這就意味着,程式運作過程中,集合的記憶體是不能釋放的,可以使用指針,為了避免記憶體洩漏,可以使用智能指針。