Реализуют ли типы стандартной библиотеки C ++ безопасное исключение при копировании? - PullRequest
2 голосов
/ 20 ноября 2010

Недавно я оценил идиому копирования и замены и использовал его для реализации назначения копирования для любого класса, который управляет ресурсом. Так что это заставило меня задуматься о типах стандартной библиотеки: гарантирует ли стандарт поведение, исключающее безопасность?

Например, рассмотрим класс, который содержит один std::string элемент данных. Обычно я бы не реализовал свое собственное назначение копирования и т. Д., Но безопасно ли это? Гарантирует ли стандарт, что элемент данных std::string останется неизменным в случае неудачного копирования? Было бы полезно в этом случае реализовать функцию копирования и замены или это слишком далеко?

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

Стандарт явно указывает на «стих» 21.4.1.2.что любые другие исключения, кроме std::bad_length "не будут иметь никакого эффекта".

1 голос
/ 20 ноября 2010

Единственная причина, по которой было бы выброшено назначение копирования для std :: string, это если динамическое размещение не удалось, и в этом случае вы (возможно) все равно облажались.Стандартная библиотека - это пример дизайна C ++, и я не думаю, что они упустили бы такую ​​вещь.Я бы не стал проверять стандартные типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...