我有一個快速的問題,關於從類中的公共成員函數返回一個指向矢量或指針映射的指針的含義。C++從一個公共成員函數返回指針的向量/映射
這是我的代碼:
這裏是在B類
vector<A*>* ClassB::getfunction(){
returns m_test;
}
m_test是指針類型的B類的指針的載體的私有數據成員的成員函數。這個對象將在堆上初始化,所以我需要在類的析構函數中刪除它(包括向量中的所有元素)。
我會使用如下所示的函數。
B* ex_B = new B();
vector<A*>* ex_ptr_vecA = new vector<A*>;
ex_ptr_vecA = ex_B->getfunction();
我的問題:
因爲我有一個的內存都在堆上分配兩個對象將我需要刪除他們兩個?
該命令是否重要,以下是否正確?
B* ex_B = new B();
vector<A*>* ex_ptr_vecA = new vector<A*>;
ex_ptr_vecA = ex_B->getfunction();
//do something with ex_ptr_vecA
//Then I want to delete the allocate memory to the heap
//delete class B first
delete ex_B;
//and then the vector
//need to loop over vector elements and delete one at a time
for(int i =0; i < ex_ptr_vecA; i++){
delete ex_ptr_vecA->at(i);
}
delete ex_ptr_vecA;
這是正確的,或者我會試圖刪除懸掛指針,因爲類B的析構函數已經取消了堆內存的分配?
對不起Typo。在函數中應該返回一個指針向量的指針。這仍然會給我同樣的結果嗎? – MWright
@特許:是的,會的。如果m_test屬於B(閱讀:是B的成員),則只有B應刪除它。你可以使用scoped_ptr和引用來清除它。 – thiton
是否意味着我只需要刪除ex_B?你能告訴我一個解決上述代碼的方法嗎? – MWright