2010-05-15 108 views
0

我正在存儲指向數組中vec_A的元素的指針。假設vec_A不會調整大小。所以,a_ptrs[i]將指向正確的元素。刪除存儲指向某些對象的指針的數組

我的問題是:

假設A * a_ptrs [3]在class B聲明。由於它不是使用'new'創建的,我猜測我不需要在析構函數中刪除它。我對嗎??

class A { 
     public:      
      int getNumber();    
      A(int val); 
      ~A(){}; 
     private: 
       int num; 
};  
A::A(int val){ 
     num = val; 
     };    
int A::getNumber(){ 
    return num; 
}; 

int main(){ 
    int i =0; 
    int num;  
    std::vector<A> vec_A; 
    for (i = 0; i < 10; i++){ 
     vec_A.push_back(A(i)); 
     } 

    A* a_ptrs[3];   
    a_ptrs[0] = &vec_A[0];   
    a_ptrs[1] = &vec_A[3];   
    a_ptrs[2] = &vec_A[5]; 

    for (i = 0; i<3; i++){ 
     std::cout<<"\n: a_ptrs[i].getNumber() = "<<a_ptrs[i]->getNumber(); 
    }   
    std::cout << "\nPress RETURN to continue..."; 
    std::cin.get();  
    return 0; 
} 
+3

當你需要刪除一個數組時,一定要做'delete [] foo;',而不是'delete foo;'(數組刪除與標量刪除)。正如指出的那樣,不,你不需要這裏。 – 2010-05-15 08:35:52

回答

2

是的,那是正確的。你不需要使用刪除。唯一的問題是如果矢量調整大小,例如通過調用push_back等 - 但你在你的帖子中調用了它。

2

是的,delete僅用於分配了new的變量。

0

正確,因爲程序中沒有動態內存分配。

我的建議是使用vector.reserve()函數來保留向量的大小,這將提高程序性能。

基本上,當您向CArray(MFC)或std :: vector添加元素時,它會重新分配必要的內存並複製這些元素,這樣會導致內存碎片並降低程序速度。