删除存储指向某些对象的指针的数组

时间:2010-05-15 08:06:34

标签: c++

我在数组A* a_ptrs[3]中存储指向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 个答案:

答案 0 :(得分:2)

是的,那是正确的。您不需要使用删除。唯一的问题是如果向量调整大小,例如通过调用push_back等 - 但你在帖子中调出了它。

答案 1 :(得分:2)

是的,delete仅用于使用new分配的变量。

答案 2 :(得分:0)

正确,因为程序中没有动态内存分配。

我的建议是使用vector.reserve()函数来保留向量的大小,这将提高程序性能。

基本上,当您向CArray(MFC)或std :: vector添加元素时,它会重新分配必要的内存并复制元素,这样会导致内存碎片并降低程序速度。