Что компилятор добавляет к пустому объявлению класса? - PullRequest
4 голосов
/ 18 апреля 2010

Предположим, я пишу

class A { };

Компилятор должен предоставлять (по мере необходимости)

  1. конструктор
  2. Деструктор
  3. конструктор копирования
  4. = оператор

Это все, что обеспечивает компилятор? Есть ли какие-либо добавления или удаления в этом списке?

Ответы [ 4 ]

6 голосов
/ 18 апреля 2010

Это завершено. Но есть два момента, на которые стоит обратить внимание:

  1. Это оператор copy =. Также как существует конструктор copy , есть оператор присваивания copy .
  2. Они предоставляются только при фактическом использовании.

Некоторое объяснение 2:

struct A { private: A(); };
struct B : A { };

Отлично! Предоставление конструктора по умолчанию было бы некорректно для "B", потому что он не смог бы вызвать конструктор базового класса. Но конструктор по умолчанию (и другие специальные функции) предоставляется только (мы говорим, что неявно определен ), если он действительно необходим.

1 голос
/ 18 апреля 2010

Ваш список завершен. Это все, что он добавляет.

0 голосов
/ 11 ноября 2014

Есть пять свойств:

Конструктор

конструктор копирования

деструктор

оператор присваивания

оператор ссылки (&) - адрес

0 голосов
/ 04 октября 2014

Список не заполнен ............ Помимо вышеупомянутых свойств FOUR, компилятор также автоматически предоставляет перегруженный оператор адреса (&), который возвращает адрес вызывающего объекта.

...