2017-10-26 2 views
0

우리는 삭제하거나 작동이 보장된다 [] 삭제, 코드 리뷰에 내가 아래의 코드 검토, C++에서 언어 당으로C++에서 delete [] 또는 delete 조작에 필요한 try-catch를 사용하고 있습니까?

void FreeResourceForElements(void) 
{ 
    try 
    { 
     delete[] m_cpMemPool; 
    } 
    catch(...) 
    { 
     // statement for printing error message in log 
    } 
} 

에 대한 검토에서이 질문이 있어요 Visual Studio 2005에서 응용 프로그램을 개발하고 있습니다 따라서 예외를 throw하지 않기 때문에 여기 try-catch를 사용하지 않아도 catch 블록이 죽은 코드가됩니다. 그러나 내가 인터넷에서 그의 표준을 확인하기 위해 표준 참조를 검색했을 때, 불행히도 나는 아무것도 찾을 수 없었다. 그래서 나는이 질문을 여기에두고있다. 제발 조언.

+4

소멸자가 던지지 않는 것이 일반적이며 C++에서는 기본값이 아닙니다. 하지만 여전히 전적으로 클래스에 달려 있습니다. 따라서 '삭제'가 던지지 않는 공식 보장은 없지만 실제로 그러한 보증이 될 수 있습니다. –

답변

4

delete[]은 각 배열 요소의 소멸자를 호출합니다. 코드베이스에 소멸자가 noexcept이어야하거나 예외가 소멸자 밖으로 전파되지 않도록 예외를 처리해야한다는 규칙이있는 경우 (실제로 해당 규칙이 적용됨) try-catch 블록에 delete[]을 래핑 할 필요가 없습니다.

+0

빠른 응답을 주셔서 감사합니다. 배열 객체의 유형이 내장 유형 (char) 인 경우 필요합니까? –

+0

@VKrishnaRaoRacharla 그런 경우에는 예외를 throw 할 수 없습니다. – Brian