2015-07-21 105 views
-1

如果我有下面的類:C++另一個內存泄漏問題

class SimpleContainer { 
private: 
    std::vector<int> vec_; 

public: 
    void set_vec(std::vector<int>* vec) { 
     vec_ = *vec; 
    } 

    SimpleContainer(){} 
    ~SimpleContainer(){} 
}; 

然後像做:

int main() { 
    std::vector<int>* vec = new std::vector<int>(); 
    SimpleContainer* sc = new SimpleContainer(); 
    sc->set_vec(vec); 

    delete sc; 
} 

是否VEC得到泄露?還是它會被SimpleContainer的析構函數自動清理?假設我只調用一次set_vec。

+2

是的。你在'vec_ = * vec'時複製一份,所以原稿仍然會被泄漏。 – OMGtechy

+0

你爲什麼要自己管理動態分配的內存,並抱怨泄漏?使用什麼用[標準庫]提供(http://en.cppreference.com/w/cpp/memory) –

回答

4

是否VEC得到泄露?

是。您的代碼中有delete零呼叫(對於vector<int>*)。每個new需要與delete配對。

其實沒有理由有任何指針這裏任何責任。同樣的行爲可以通過以下方式完成:

void set_vec(const std::vector<int>& vec) { 
    vec_ = vec; 
} 

SimpleContainer sc; 
sec.set_vec({}); 
+0

@DrewDormann哈哈,是的,我想,'sc'傢伙毀了我的觀點。 – Barry