2013-02-27 2 views
0

일부 C++ 코드를 작성하는 동안 어떤 구조에서는 예외가 발생하지 않도록 보장하기 위해 end() 함수 호출이 필요합니다.파괴하기 전에 특정 함수가 호출되기 전에

Foo a(x,y)

~a은 -> 특정 정말 나쁜 상황

Foo a(x,y)

a.end()에서 던질 수 있습니다 -> 아마

가 궁금 예외를 던질하지

~a 보증 등을 던졌습니다 전자가 있으면 컴파일러에 의해이 제약 조건을 강제하기위한 합법적 인 방법 (Deconstruction 전에 호출되어야 함) 또는 최소한 경고를 출력 하시겠습니까?

인사와 감사

+5

소멸자는 예외를 던져서는 안됩니다 ... – ForEveR

+0

래퍼가 문제를 옮기지 않겠습니까? 래퍼 소멸자는 end를 호출하지만 끝은 throw 될 수 있으므로 동일한 문제가 발생합니다. 나는 try catch를 사용할 수 있지만 내 생각에는 매우 우아하지 않다. –

+0

질문 : 누가이 예외를 처리 할 것인가? 누군가가 원한다면, 그에게 전화하게하십시오. – kassak

답변

4

당신이 파괴의 전제 조건으로 발생하는 물건이 필요하면, 당신은 소멸자에서 호출하여 해당을 적용해야한다.

하지만 이어야하며 예외는 catch하고 not let them leak from the destructor이어야합니다.

+0

그래, 나도 알아, 난 그냥 아직 잘 모르는 더 우아한 솔루션을 원했고, 나에겐 나쁜 행운이라고 생각한다 ;-). 어쨌든 Thx 어쨌든 –

+1

@ChristopherSchildt : 이것은 가장 우아한 해결책 인 것 같습니다. 정확한 시간에 선행 조건을 자동으로 호출하는 접근 방식보다 더 우아 할 수있는 것은 무엇입니까? –

+0

글쎄, 나는 소멸자 내에서 캐치를 시도한다는 생각을 좋아하지 않는다. 이것은 다소 주관적 일지 모르지만, 그것은 단지 나를 어색하게 만든다. –

관련 문제