Vor kurzem las ich eine Antwort auf Stackoverflow über What is the copy-and-swap idiom? und wusste, dass das Copy-and-Swap-Idiom kannWarum SGI STL nicht das Copy-and-Swap-Idiom verwenden?
Code Doppelarbeit zu vermeiden und eine starke Ausnahme Garantie bietet.
Allerdings, wenn ich in SGI STL sah deque
implementation, fand ich, dass es nicht das Idiom nicht verwendet. Ich frage mich, warum nicht, wenn das Idiom irgendwie wie eine "Best Practice" ist?
deque& operator= (const deque& __x) {
const size_type __len = size();
if (&__x != this) {
if (__len >= __x.size())
erase(copy(__x.begin(), __x.end(), _M_start), _M_finish);
else {
const_iterator __mid = __x.begin() + difference_type(__len);
copy(__x.begin(), __mid, _M_start);
insert(_M_finish, __mid, __x.end());
}
}
return *this;
}
Snarky Antwort: Alexander Stepanov hatte keine Zeitmaschine. Die SGI STL ist alt, wurde in den frühen 1990ern geschrieben und basiert auf noch älteren Arbeiten von Stepanov in den 1980er Jahren auf Ada-Generika. Soweit ich das beurteilen kann, wurde das Kopieren und Tauschen Ende der 1990er Jahre von Herb Sutter entwickelt. Beachten Sie auch, dass diese SGI-Implementierung nicht die starke Ausnahmesicherheitsgarantie bietet. –
@DavidHammen, Sie werden nicht sehen, dass Kopieren und Tauschen für Container verwendet wird, selbst in brandneuen std :: lib-Implementierungen, die in diesem Jahrtausend geschrieben wurden, wie zB libC++. –