У меня есть следующий кусок кода:
template<typename T>
class derClass : public baseClass<column<T>, column<k>>
{
//prohibit value semantics
derClass(const derClass&) = delete;
derClass& operator= (const derClass&) = delete;
public:
...
}
Есть много мест этого кода, которые я не понимаю:
delete
имею в виду? Я не вижу никаких заявлений о delete
переменная.derClass& operator= (const derClass&) = delete;
delete
вот новый C ++ 11 вещь, и сообщает компилятору, что этих методов не существует. В противном случае компилятор создал бы их версии по умолчанию.
Конструктор, принимающий постоянную ссылку на свой собственный класс, является конструктор копирования. Для чего нужен конструктор копирования, следует объяснить в любом начинающем тексте о C ++.
Поскольку конструктор копирования и оператор копирования теперь удалены, это означает, что вы не можете создать экземпляр derClass
из другого экземпляра derClass
,
То, что вы видите, используется для отключения конструктора копирования.
Для получения дополнительной информации см .:
Какой самый надежный способ запретить конструктор копирования в C ++?
Семантика значения — это когда ваш объект ведет себя как значение: когда вы присваиваете его другому объекту, второй объект будет иметь то же значение, когда вы изменяете первый, второй остается неизменным. Другой случай — это ссылочная семантика — когда вы меняете первое, меняется второе.
Конструктор, взяв ссылку на тот же класс, является copy-constructor, он просто копирует объект. Второе определение — оператор присваивания. Когда вы отмечаете их как delete
— ваш объект не может быть скопирован и назначен.
В целом, использование этих deleted
специальные функции означают, что вы не можете копировать экземпляры этого класса или назначать им:
derClass d1, d2;
derclass d3{d1}; // ERROR: cannot copy
d2 = d1; // ERROR: cannot copy-assign