Dlaczego operatorzy przypisania kontenerów nie są wyjątkowi?
zauważyłem tostd::string
(naprawdęstd::basic_string
s) operator przypisania przeniesienia jestnoexcept
. Ma to sens dla mnie. Ale potem zauważyłem, że żaden ze standardowych kontenerów (np.std::vector
, std::deque
, std::list
, std::map
) deklaruje operatora przypisania przeniesienianoexcept
. To dla mnie mniej sensowne. ZAstd::vector
na przykład jest zazwyczaj zaimplementowany jako trzy wskaźniki, a wskaźniki mogą być z pewnością przypisane do ruchu bez rzucania wyjątku. Potem pomyślałem, że może problem polega na przesunięciu rozdzielacza kontenera, alestd::string
ma też alokatory, więc jeśli to był problem, spodziewałbym się, że to wpłyniestd::string
.
Dlaczego tak jeststd::string
operator przypisania przeniesienianoexcept
, ale nie są to operatory przypisania ruchu dla standardowych kontenerów?