「我要清除的功能的存儲器後,完成了自己的工作」〜>只要你使用的是帶有自動存儲時間的對象,一切都照顧的(在內存管理方面)。內存管理問題在您開始使用動態分配時開始,這使您成爲負責清理的人員。基本上:每調用一個new
,你應該調用delete
,並且對於每個new[]
,你應該調用delete[]
。所以如果可以的話,應避免在可能的時候動態分配東西。
現在注意,我們的函數值取第二個參數:
vector<customers> process(char* const *filename, vector<int> ID)
所以當你傳遞一個std::vector<int>
對象插入功能,創建這個載體的拷貝。以char* const*
的形式通過filename
似乎也比必要更復雜。更合理的原型在這種情況下將是:
std::vector<customers> process(const char* filename, const std::vector<int>& ID)
現在,在這個函數的主體:
{
std::vector<customers> list_of_customers;
...
return list_of_customers;
}
list_of_customers
是具有自動存儲持續時間的對象。在沒有優化的情況下,在調用return
時,將創建此矢量的副本,並且原始對象將被正確銷燬。然而,像NRVO這樣的各種優化技術將會處理創建冗餘副本,所以您不必擔心它。如果您將在下面的方式來使用此功能:
std::vector<customers> list_of_customers = process(filename, ID);
複製省略將最有可能發生所以沒有副本,即使沒有NRVO創建。
看一看:What are copy elision and return value optimization?
願你貼上一個版本,您所談的功能? –
這取決於你如何分配內存並返回向量。請提供一個代碼示例。 –
@POD,有(N)RVO併爲此移動語義。 – chris