Есть ли класс C ++, который не может быть использован в STL? - PullRequest
5 голосов
/ 18 марта 2010

Просто придумайте этот вопрос.Любой намек?

Ответы [ 5 ]

13 голосов
/ 18 марта 2010

классов, которые нельзя скопировать. Контейнеры STL требуют, чтобы объекты были копируемыми, поскольку контейнер владеет копией этого объекта и должен иметь возможность перемещать ее.

9 голосов
/ 18 марта 2010

Моя любимая вещь не помещать в контейнер STL - это std :: auto_ptr ... случаются очень плохие вещи. .. в основном неожиданная потеря объектов, я думаю.

В общем, все, что не копируется, не может попасть в контейнер - вы получите ошибки компиляции. Нечто с ненормальной семантикой копирования (например, auto_ptr) не должно помещаться в контейнер (но вы, вероятно, не получите никаких ошибок компилятора). В качестве контейнера можно свободно создавать различные временные копии.

Я думаю, что без "здравомыслящего" конструктора по умолчанию и оператора присваивания вас тоже ждет некоторая боль.

4 голосов
/ 18 марта 2010

В зависимости от операций, которые вы выполняете, вам часто нужен конструктор по умолчанию в дополнение к возможности копирования для объектов, хранящихся в контейнерах. Для объектов, передаваемых в алгоритмы, существуют другие требования, такие как возможность вызова или увеличения. Требования хорошо документированы.

2 голосов
/ 18 марта 2010

Класс не может генерировать исключения в деструкторе ... ну, ни один класс никогда не должен бросать в деструктор

0 голосов
/ 18 марта 2010

Зависит от контейнера, для получения дополнительной информации в разделе 23 стандарта указаны требования ко всем контейнерам и методам.

Чтобы быть в безопасности, вы должны предполагать, что всегда требуется следующее: Конструкция по умолчанию и конструкция Copy

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