Как мне поменять MFC CString? - PullRequest
       66

Как мне поменять MFC CString?

4 голосов
/ 05 октября 2011

ОК, так что я все продаю с копией и заменой идиома и думаю, что в основном знаю, как это реализовать.

Однако, или кодовая база использует Класс CString MFC как строка, и это не изменится.

Поскольку swap должно (должно быть ???) быть nothrow, я не могу сделать

std::swap(this->my_cstring, rhs.my_cstring);

, поскольку это создаст временный объект CString, который может выбрасывать.(Плюс это неэффективно.)

Так, где я остался?Должен ли я добавить попробовать?Должен ли я на самом деле допустить это (ну, очень редко) состояние нехватки памяти, чтобы вызвать исключение и вызвать сбой подкачки?

Глядя на реализацию CStrings, не кажется, что есть член или функция, которая допускает обмен...

1 Ответ

2 голосов
/ 05 октября 2011

Self-Ответ:

После более тщательного изучения CString выясняется, что из-за того факта, что CString является реализацией строки с подсчетом ссылок, замена его через std :: swap на самом деле безопасна для исключения "99%", поскольку все это случается, что некоторые ссылки увеличивают и уменьшают.

Это только "99%" безопасно, так как когда объект CString IsLocked, он всегда будет делать копию.

...