Необходимо ли переписывать все дефолтные методы?
От: na1s  
Дата: 20.08.09 05:21
Оценка:
А вообще необходимо ли это?
Т.е. если в конструкторе вводятся некоторые данные, необходимо ли создавать конструктор по умолчанию, и писать методы по установке данных, которые я получал на примере своего конструктора?
Или оператор присваивания?
У меня ничего такого нет, чтоб копировать или присваивать? То как быть?
Или сделать их приватными?
Re: Необходимо ли переписывать все дефолтные методы?
От: Bell Россия  
Дата: 20.08.09 05:24
Оценка: 2 (1)
Здравствуйте, na1s, Вы писали:

N>А вообще необходимо ли это?

N>Т.е. если в конструкторе вводятся некоторые данные, необходимо ли создавать конструктор по умолчанию, и писать методы по установке данных, которые я получал на примере своего конструктора?
N>Или оператор присваивания?
N>У меня ничего такого нет, чтоб копировать или присваивать? То как быть?
N>Или сделать их приватными?

Странный вопрос
Если поведение по умолчанию устраивает — незачем городить огород, если не устраивает — реализовать свой вариант.
Любите книгу — источник знаний (с) М.Горький
Re: Необходимо ли переписывать все дефолтные методы?
От: jazzer Россия Skype: enerjazzer
Дата: 20.08.09 05:30
Оценка:
Здравствуйте, na1s, Вы писали:

N>А вообще необходимо ли это?

N>Т.е. если в конструкторе вводятся некоторые данные, необходимо ли создавать конструктор по умолчанию, и писать методы по установке данных, которые я получал на примере своего конструктора?
N>Или оператор присваивания?
N>У меня ничего такого нет, чтоб копировать или присваивать? То как быть?
N>Или сделать их приватными?

Это вопрос по дизайну, а не по С++.
Если твоим клиентам нужен дефолтный конструктор и прочая, и если им нужно не то, что генерит компилятор но основании типов членов, то придется писать.
А если не нужен, то не нужно

Ну либо я не понял, о чем ты спрашиваешь.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Необходимо ли переписывать все дефолтные методы?
От: Alexander G Украина  
Дата: 20.08.09 07:35
Оценка: 32 (2)
Здравствуйте, na1s, Вы писали:

N>А вообще необходимо ли это?

N>Т.е. если в конструкторе вводятся некоторые данные, необходимо ли создавать конструктор по умолчанию, и писать методы по установке данных, которые я получал на примере своего конструктора?
N>Или оператор присваивания?
N>У меня ничего такого нет, чтоб копировать или присваивать? То как быть?
N>Или сделать их приватными?

Если объект не может себя копировать — конструктор копирования и оператор присваивания надо запрещать. Если класс содержит некопируемые члены, копирование уже запрещено, но не помешает ещё раз запретить явно.

Если дефолтные методы, содержащие почленное копирование и присваивание, работают корректно, то их можно оставить. Однако, если приложению незачем копировать объект, может быть полезно таки запретить их.

Писать методы, делающие то же, что сгенерированные — глупо. Более того, если у класса куча полей, и только конкретное требует особой обработки, лучше то поле завернуть в класс с особым копированием, а не писать копирование для всего класса. Дело в том, что при наличии кучи полей не исключено рачширение этой кучи, и поддержка списков в операторах потребует дополнительного внимания.

Если нужно указать, что дефолтные методы оставлены преднамеренно, можно написать комментарий вроде:
class Xyz
{
public:
  /* Xyz(const Xyz&) = default; */
  /* Xyz& operator=(const Xyz&) = default; */
}


Аналогичный комментарий можно использовать для запрета

class Xyz
{
private:
  Xyz(const Xyz&) /* = delete */;
  Xyz& operator=(const Xyz&) /* = delete */;
}
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.