2010-05-15 74 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添加元素时,它会重新分配必要的内存并复制这些元素,这样会导致内存碎片并降低程序速度。

相关问题