OK, so I'm all sold on the copy-and-swap idiom and I think I mostly know how to implement it.
However, or codebase uses MFC's CString class as string and this ain't gonna change.
Since swap
must (should???) be nothrow, I cannot do
std::swap(this->my_cstring, rhs.my_cstring);
since that will create a temporary CString object which may throw. (Plus its inefficient.)
So where I'm left? Should I add a try-catch? Should I actually allow this (well, extremely rare) out of memory condition to raise an exception and make swap fail?
Looking at CStrings implementation, it doesn't seem there's a member or function that allows for swapping ...
CString
in a 100% exception save manner. – Niu