예를 들어, 어떤 오래된 C 물건 (예 : pthreads 또는 기타)을 사용해야하는 클래스가 있다고 가정 해 봅시다. 이유 중 하나 또는 다른 이유로, 나는 의 malloc()과 같이, 내 생성자에서 호출 소멸자에 대한 잘못된 정보의 많은 거기 밖으로있다 것 같다소멸자와 Malloc'd 회원
class Foo
{
public:
Foo()
{
someMutex = malloc(sizeof(pthread_mutex_t));
pthread_mutex_init(someMutex);
someString = new string("yay string!");
}
private:
pthread_mutex_t * someMutex;
string * someString;
}
. 명시 적으로 정의 된 소멸자의 예가 포인터 기반 멤버에서 delete
을 호출하는 것을 계속 보았습니다.하지만 메모리를 관리하는 클래스의 소멸자를 명시 적으로 정의 할 필요는 없습니다. 내가 소멸자를 필요로하는 것은 파일 처리 정리와 같은 것입니다.
따라서 다음 내 질문에 이르게 : 심지어 someMutex
불구하고 malloc
할당이 아니라 C++ new
명령을 암시 적으로 정의 소멸자는 여전히 돌볼 것, 또는 내가 어떻게해야합니까했다?
또 다른 질문을 해결할 수 있습니다. 위의 클래스에서 delete
을 someString
에 호출하기 위해 소멸자를 명시 적으로 정의해야합니까, 아니면 나를 돌보아야합니까?
"메모리 관리를 위해 클래스의 소멸자를 명시 적으로 정의 할 필요가 없다는 것을 계속 읽고 있습니다."- 올바르지 않습니다. –
@Oli 설명을 주셔서 감사합니다! – Ben
생성자가 객체의 메모리를 할당하는 것과 같은 방법으로 객체의 메모리를 해제하기위한 소멸자를 작성할 필요가 없습니다. 핵심은 바로 * 얕은 * 할당 및 해제입니다. 클래스 내에 * 추가 * 메모리를 할당하면 생성자에서이를 소멸자에서 해제해야합니다. (이것은 생성자에서'new' 호출이 여러 개있을 때 재미 있습니다. 나중에 하나가 예외를 던집니다.) 여러분이 읽은 것은'~ Foo() {delete this; }' –