2016-01-04 76 views
-1

這是一個後續C++ : Coverity reports leaks for peculiar use of references and containersC++內存管理:成員變量是如何存儲的?

的問題:*b在堆上(new B()),但其中存儲a_vector及其要素分配的?當新元素被推入a_vector時會發生什麼?

int main() 
{ 
    ... 
    B* b = new B(); 
    A a; 
    b->add_a_to_b(a); 
    ... 
    delete (b); 
} 

class B { 
public: 
    std::vector<A> a_vector; 
    void add_a_to_b(const A& a) 
    { 
     a_vector.push_back(a); 
    } 
+0

'a_vector'被存儲在與所述堆其餘的'b',因爲你用'new'來請求它(當然,這取決於'B'的實例如何覆蓋'new').a_vector的內容存儲在一個實現定義最有可能在堆上 –

回答

3

a_vectorB級左右的成員,創建一個new B內存與其他地方一樣分配時B(又名你形容爲「上堆」)。

當元素被添加到該載體中,所述載體的成員函數(像push_back()使用矢量的分配器根據需要如何/在分配器不依賴於分配器。

+0

謝謝。分配器在x86機器上的默認行爲是什麼? – unshul

+1

這取決於您的標準庫的實現者 - 對於特定的機器架構沒有一般的答案,並且不同圖書館的實施者(例如不同的圖書館)編譯器)可能會選擇做不同的事情,即使針對同一臺機器。也沒有什麼能阻止你定義你自己的分配器(只要你滿足分配器的所有需求),它使用一些時髦的技術來管理內存,並將它用於你的容器。這就是爲什麼我說「這取決於分配器」。 – Peter