OK, 그래서 나는 모두 copy-and-swap idiom에 팔렸고, 나는 그것을 구현하는 방법을 대부분 알고 있다고 생각합니다.MFC CString을 바꾸려면 어떻게해야합니까?
그러나 코드베이스는 MFC's CString class을 문자열로 사용하며 변경되지 않습니다.
swap
해야하기 때문에 그 던질 수 임시 CString을 객체를 생성하기 때문에 내가
std::swap(this->my_cstring, rhs.my_cstring);
하지 수 nothrow 수 (???한다). (더하기 비효율적입니다.)
그래서 내가 남았습니다. try-catch를 추가해야합니까? 예외를 발생시키고 스왑을 실패하게하려면이 (잘, 극히 드문) 메모리 상태를 실제로 허용해야합니까? CStrings 구현 보면, 교환을 허용하는 회원이나 기능이있어 보이지 않는다
...
메모리 부족을 방어 적으로 코딩 할 이유가 없습니다. 귀하의 CString 스왑에서 그것을 다루는 것만으로 다른 곳에서 팝업 될 것입니다. –
@ 에이 든 : "그것을 다루는 것"이란 무엇을 의미합니까? 'CString'을 100 % 예외 저장 방식으로 바꿀 수는 없습니다. –
죄송 합니다만, 스왑 주변에서 시도하거나 catch 할 수있는 유일한 것이 메모리 부족 인 경우, 메모리 부족으로 인해 어쨌든 다른 곳에서 충돌이 발생하므로 try/catch가 없어야합니다. –