Class name{
private:
int *ptr=new ptr[10];
public:
//do some thing
~name(){
delete ptr; //should I do this?
}
};
이 클래스를 작성한 후, 범위를 벗어나면 동적으로 할당 된 정수 배열을 자동으로 처리하는 소멸자를 작성해야합니까?클래스 내에 동적 할당 배열을 삭제하십시오.
Class name{
private:
int *ptr=new ptr[10];
public:
//do some thing
~name(){
delete ptr; //should I do this?
}
};
이 클래스를 작성한 후, 범위를 벗어나면 동적으로 할당 된 정수 배열을 자동으로 처리하는 소멸자를 작성해야합니까?클래스 내에 동적 할당 배열을 삭제하십시오.
예, 할당 한 메모리를 모두 해제해야합니다. 그러나 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:
//...
};
그래서 로컬 변수 (클래스에 대해 로컬)로 선언하면 클래스 객체가 삭제 될 때 로컬 변수가 자동으로 삭제됩니까? –
@NygenPatricia 예. 비 포인터 클래스 멤버는 포함하는 클래스가 소멸 될 때 소멸됩니다. –
예. 모든 "new"에는 "delete"호출이 있어야합니다. – MayurK