2010-05-15 4 views
0

vec_A의 요소에 대한 포인터를 배열 A* a_ptrs[3]에 저장합니다. 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;'를해야합니다. 지적했듯이, 아니, 여기에서는 필요 없습니다. –

답변

2

그래, 맞아. 삭제를 사용할 필요가 없습니다. 유일한 문제는 벡터 크기가 조정 된 경우입니다. push_back 등을 호출하여 -하지만 당신은 귀하의 게시물에 그 전화.

2

예, deletenew으로 할당 된 변수에만 사용됩니다.

0

프로그램에 동적 메모리 할당이 없으므로 정확합니다.

제 제안은 vector.reserve() 함수를 사용하여 프로그램 성능을 향상시키는 벡터의 크기를 예약하는 것입니다.

기본적으로 요소를 CArray (MFC) 또는 std :: vector에 추가하면 필요한 메모리를 다시 할당하고 요소를 복사하여 메모리 조각화로 이어지고 프로그램 속도가 저하됩니다.

관련 문제