Синтаксис — Что означает запрет семантики значений в C ++?

У меня есть следующий кусок кода:

template<typename T>
class derClass : public baseClass<column<T>, column<k>>
{
//prohibit value semantics
derClass(const derClass&) = delete;
derClass& operator= (const derClass&) = delete;

public:
...
}

Есть много мест этого кода, которые я не понимаю:

  1. Что это delete имею в виду? Я не вижу никаких заявлений о delete переменная.
  2. Зачем нам нужен конструктор, который принимает в качестве аргумента объект того же класса?
  3. Что означает вся эта строка: derClass& operator= (const derClass&) = delete;

0

Решение

delete вот новый C ++ 11 вещь, и сообщает компилятору, что этих методов не существует. В противном случае компилятор создал бы их версии по умолчанию.

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

Поскольку конструктор копирования и оператор копирования теперь удалены, это означает, что вы не можете создать экземпляр derClass из другого экземпляра derClass,

4

Другие решения

То, что вы видите, используется для отключения конструктора копирования.

Для получения дополнительной информации см .:
Какой самый надежный способ запретить конструктор копирования в C ++?

1

Семантика значения — это когда ваш объект ведет себя как значение: когда вы присваиваете его другому объекту, второй объект будет иметь то же значение, когда вы изменяете первый, второй остается неизменным. Другой случай — это ссылочная семантика — когда вы меняете первое, меняется второе.

Конструктор, взяв ссылку на тот же класс, является copy-constructor, он просто копирует объект. Второе определение — оператор присваивания. Когда вы отмечаете их как delete — ваш объект не может быть скопирован и назначен.

1

  1. Это синтаксис C ++ 11, который по существу означает «этот класс не имеет X», где X — это, во-первых, конструктор копирования, а во-вторых, оператор присваивания копии.
  2. Это конструктор копирования. Это объясняется в любой вводной книге C ++.
  3. Это оператор присваивания копии. Это объясняется в любой вводной книге C ++.

В целом, использование этих deleted специальные функции означают, что вы не можете копировать экземпляры этого класса или назначать им:

derClass d1, d2;
derclass d3{d1}; // ERROR: cannot copy
d2 = d1;         // ERROR: cannot copy-assign
1
По вопросам рекламы [email protected]