문서를 보고 파악하려고 하는데 배경이 부족하여 도움을 요청합니다.
이게 exception 발생 한다는 애기인지 뭘 보장 한다는건지 의미를 좀 알려주시면 감사 하겠습니다.
Exception safety
Provides the same level of guarantees as the operation performed on the underlying container object.
1. 어디서 가져온 어떤 텍스트의 일부인지 밝혀 주셔야지, 한 줄만 달랑 들고오면 어쩝니까
2. 제시된 문장은 문자 그대로 underlying container object에 수행된 operation과 같은 수준의 보장을 한다는 겁니다.
3. 이런 식으로 되어 있는 이유는 queue가 container가 아니라 container adapter이기 때문입니다. queue template은 데이터를 저장하는 스토리지를 직접 구현하지 않고, 다른 컨테이너 (underlying container)를 템플릿 매개변수로 지정 받아 사용합니다. 디폴트로는 std::deque를 사용하지요.
위 deque::push_back의 exceptions 단락을 보시면 아시겠지만, 대충 귀하의 문제는 Allocator::allocate가 예외를 발생시키거나, 원소의 복사/이동 생성/할당이 예외를 발생시키는 경우인 것으로 예상이 됩니다. 커스텀 할당자 같은 걸 쓰고 있는 게 아니라면 전자보다는 후자가 가능성이 더 높을텐데, 어쩌다 이런 문제가 일어났는지는 질문글만 봐서는 잘 모르겠네요.
1. 어디서 가져온 어떤 텍스트의 일부인지 밝혀
1. 어디서 가져온 어떤 텍스트의 일부인지 밝혀 주셔야지, 한 줄만 달랑 들고오면 어쩝니까
2. 제시된 문장은 문자 그대로 underlying container object에 수행된 operation과 같은 수준의 보장을 한다는 겁니다.
3. 이런 식으로 되어 있는 이유는 queue가 container가 아니라 container adapter이기 때문입니다. queue template은 데이터를 저장하는 스토리지를 직접 구현하지 않고, 다른 컨테이너 (underlying container)를 템플릿 매개변수로 지정 받아 사용합니다. 디폴트로는 std::deque를 사용하지요.
https://en.cppreference.com/w/cpp/container/queue
queue::push는 queue의 underlying container object c에 대해 c.push_back을 호출하게 되어 있습니다.
https://en.cppreference.com/w/cpp/container/queue/push
결국 정리하면, 디폴트 queue 객체에 대해서 queue::push의 exception safety는 deque::push_back의 보장과 같다는 거죠.
그리고 deque::push_back의 exception safety는 strong exception guarantee입니다.
https://en.cppreference.com/w/cpp/container/deque/push_back
4. 뭐, 그런 게 중요하다기보다는...
위 deque::push_back의 exceptions 단락을 보시면 아시겠지만, 대충 귀하의 문제는 Allocator::allocate가 예외를 발생시키거나, 원소의 복사/이동 생성/할당이 예외를 발생시키는 경우인 것으로 예상이 됩니다. 커스텀 할당자 같은 걸 쓰고 있는 게 아니라면 전자보다는 후자가 가능성이 더 높을텐데, 어쩌다 이런 문제가 일어났는지는 질문글만 봐서는 잘 모르겠네요.
아, queue::push에서 예외가 발생해서 문제를
아, queue::push에서 예외가 발생해서 문제를 겪고 있다는 게 아니라, 그런 경우가 있을 수 있느냐는 질문이었군요.
그럼 답은 "그럴 수 있다" 입니다. 이걸 "push가 발생시킨 예외"라고 부를 수 있는지는 미묘한 해석의 문제로군요.
댓글 달기