메모리를 해제하는 데 시간이 오래 걸리는 경우이를 수행하지 마십시오. 이는 특히 메모리를 해제하면 수많은 캐시 누락이 발생하는 경우 크고 시간 소모적 인 문제 일 수 있습니다. 운영 체제가 작업을 수행합니다 (물론 실제로 작동하는 시스템에서 작업하는 경우).
그러나 소멸자가 파일 또는 하드웨어의 잠금을 해제하는 것과 같이 일부 자원의 마무리 작업을 수행하고 "자원 획득이 초기화"를 사용하는 경우 적절한 소멸자가 호출되는지 확인해야합니다 (예 : 정적 객체의 함수는 main()
함수가 반환 된 후에 호출됩니다. 이것은 싱글 톤 내부에 할당 된 객체 중 일부가 리소스를 잠그는 경우에도 적용됩니다! 대부분의 경우
따라서, 실제로
는 개체에 대한 소멸자를 작성하고이 메모리
선택적으로을 해제하게하는 것이 좋습니다. 질문을
SSS는 전혀 소멸자를 작성하지 않기로 결정했다. 그러나, 나는 그것이 더 좋은 해결책이 아니라는 것을 조금 더 논쟁하고 싶습니다.
정적 객체에 대한 메모리를 해제하지 않으면 (정적이라고 함) 상식에 어긋나고 사람들이 일반적으로 프로그램을 작성하는 방식과 모순되는 매우 미묘한 최적화입니다. 메모리를 할당하고 소멸자가없는 코드는 이상한으로 보입니다. 동료들은 수업이 잘못 작성되었다고 생각할 것이고, 다른 수업에있는 동안 버그를 보게 될 것입니다.
대신 C++의 메모리 관리가 정확해야한다는 일반적인 코딩 표준을 따라야합니다. 소멸자를 작성하고 할당 해제하지 않는 것이 중요하다는 것을 보여준 후에 만 호출되지 않도록 코드를 래핑하십시오.
의도하지 않은 메모리를 해제하려면 명시 적이어야합니다.
MySingleton::~MySingleton()
{
#ifndef RELEASE
// The memory will be released by OS when program terminates!
delete ptr1;
delete ptr2;
#endif
}
또는
MySingleton::~MySingleton()
{
// We don't do anything here.
// The memory will be released by OS when program terminates!
}
하지만 소멸자가 지속하는 것이 좋습니다.
자격? –
@dribeas : 아마도 프로세스 간 통신에서'wait()'호출의 응답이 빠릅니까? –