Есть ли какой-либо класс C++, который не может использоваться в STL?

Просто придуманный этот вопрос. Какая-либо подсказка?

5
задан skydoor 18 March 2010 в 05:24
поделиться

5 ответов

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

13
ответ дан 18 December 2019 в 05:55
поделиться

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

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

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

9
ответ дан 18 December 2019 в 05:55
поделиться

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

2
ответ дан 18 December 2019 в 05:55
поделиться

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

4
ответ дан 18 December 2019 в 05:55
поделиться

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

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

0
ответ дан 18 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: