2016-10-22 4 views
0
Class name{ 
private: 
int *ptr=new ptr[10]; 

public: 
//do some thing 
~name(){ 
     delete ptr; //should I do this? 
    } 
}; 

이 클래스를 작성한 후, 범위를 벗어나면 동적으로 할당 된 정수 배열을 자동으로 처리하는 소멸자를 작성해야합니까?클래스 내에 동적 할당 배열을 삭제하십시오.

+0

예. 모든 "new"에는 "delete"호출이 있어야합니다. – MayurK

답변

1

예, 할당 한 메모리를 모두 해제해야합니다. 그러나 new[]으로 할당 된 메모리는 delete이 아니라 delete[]을 사용하여 해제해야합니다.

class name { 
private: 
    int *ptr = new ptr[10]; 

public: 
    //... 

    ~name() { 
     delete[] ptr; 
    } 
}; 

당신 해야 할 수는 std::vector 또는 std::array 대신 사용하고, 당신을 위해 메모리 관리를 처리 할 수있다.

class name { 
private: 
    std::vector<int> ptr{10}; 

public: 
    //... 
}; 

class name { 
private: 
    std::array<int, 10> ptr; 

public: 
    //... 
}; 
+0

그래서 로컬 변수 (클래스에 대해 로컬)로 선언하면 클래스 객체가 삭제 될 때 로컬 변수가 자동으로 삭제됩니까? –

+0

@NygenPatricia 예. 비 포인터 클래스 멤버는 포함하는 클래스가 소멸 될 때 소멸됩니다. –

관련 문제