Здравствуйте, na1s, Вы писали:
N>А вообще необходимо ли это?
N>Т.е. если в конструкторе вводятся некоторые данные, необходимо ли создавать конструктор по умолчанию, и писать методы по установке данных, которые я получал на примере своего конструктора?
N>Или оператор присваивания?
N>У меня ничего такого нет, чтоб копировать или присваивать? То как быть?
N>Или сделать их приватными?
Странный вопрос
Если поведение по умолчанию устраивает — незачем городить огород, если не устраивает — реализовать свой вариант.
Здравствуйте, na1s, Вы писали:
N>А вообще необходимо ли это?
N>Т.е. если в конструкторе вводятся некоторые данные, необходимо ли создавать конструктор по умолчанию, и писать методы по установке данных, которые я получал на примере своего конструктора?
N>Или оператор присваивания?
N>У меня ничего такого нет, чтоб копировать или присваивать? То как быть?
N>Или сделать их приватными?
Это вопрос по дизайну, а не по С++.
Если твоим клиентам нужен дефолтный конструктор и прочая, и если им нужно не то, что генерит компилятор но основании типов членов, то придется писать.
А если не нужен, то не нужно
Ну либо я не понял, о чем ты спрашиваешь.
Здравствуйте, 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 */;
}