Существует ли std:: noncopyable (или эквивалент)?
Там boost:: noncopyable, и у меня есть свой собственный класс noncopyable в моей библиотеке. Есть ли std:: noncopyable или эквивалентный стук в последнем стандарте С++?
Это небольшая вещь, но, исходя из такого класса, делает намерение более ясным.
Ответы
Ответ 1
Нет, потому что есть стандартный способ сделать класс не копируемым:
class MyClass
{
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
}:
Однако класс, который нельзя скопировать, можно сделать перемещаемым, перегружая конструктор из MyClass&&
.
Объявление о том, что класс не подлежит копированию (см. Выше), может быть в открытом или закрытом разделе.
Ответ 2
Я уверен, что вы уже поняли это, прочитав сообщение CashCow, но я подумал, что могу предоставить базовый класс для не подлежащих копированию классов.
class Noncopyable {
public:
Noncopyable() = default;
~Noncopyable() = default;
private:
Noncopyable(const Noncopyable&) = delete;
Noncopyable& operator=(const Noncopyable&) = delete;
};