Сообщение Re[5]: Инициализация через initializer_list и protected/priv от 31.05.2022 6:49
Изменено 31.05.2022 9:06 rg45
Re[5]: Инициализация через initializer_list и protected/priv
Здравствуйте, Marty, Вы писали:
M>Вопрос в том, что не надо ли на всякий случай все конструкторы выписывать
В этом нет нужды. Единственный определенный пользователем конструктор одновременно является и конструктором по умолчанию. Все остальные специальные функции-члены (конструкторы, деструктор и операторы присваивания) по-прежнему генерируются компилятором.
P.S. Это в том случае, когда пользователь определяет какую-нибудь специальную функцию-член (например, конструктор перемещения или копирования), тогда он может скрывать другие специальные функции-члены или делать их удаленными. В этих случая может потребоваться определить дополнительно какие-то спец. функции-члены. А определенный пользователем дефолтный конструктор никак не влияет на другие функции-члены, поэтому прописывать их явно нет необходимости, если сгенерированный компилятором вариант устраивает, разумеется.
Ну и помимо этого существуют еще и заповеди типа: "если вы определили конструктор копирования, то определите также и копирующий оператор присваивания" и т.п. Но все это не имеет отношения к случаю, описанному в твоем примере.
M>Вопрос в том, что не надо ли на всякий случай все конструкторы выписывать
В этом нет нужды. Единственный определенный пользователем конструктор одновременно является и конструктором по умолчанию. Все остальные специальные функции-члены (конструкторы, деструктор и операторы присваивания) по-прежнему генерируются компилятором.
P.S. Это в том случае, когда пользователь определяет какую-нибудь специальную функцию-член (например, конструктор перемещения или копирования), тогда он может скрывать другие специальные функции-члены или делать их удаленными. В этих случая может потребоваться определить дополнительно какие-то спец. функции-члены. А определенный пользователем дефолтный конструктор никак не влияет на другие функции-члены, поэтому прописывать их явно нет необходимости, если сгенерированный компилятором вариант устраивает, разумеется.
Ну и помимо этого существуют еще и заповеди типа: "если вы определили конструктор копирования, то определите также и копирующий оператор присваивания" и т.п. Но все это не имеет отношения к случаю, описанному в твоем примере.
Re[5]: Инициализация через initializer_list и protected/priv
Здравствуйте, Marty, Вы писали:
M>Вопрос в том, что не надо ли на всякий случай все конструкторы выписывать
В этом нет нужды (если основываться лишь на примере). Единственный определенный пользователем конструктор одновременно является и конструктором по умолчанию. Все остальные специальные функции-члены (конструкторы, деструктор и операторы присваивания) по-прежнему генерируются компилятором.
P.S. Это в том случае, когда пользователь определяет какую-нибудь специальную функцию-член (например, конструктор перемещения или копирования), тогда он может скрывать другие специальные функции-члены или делать их удаленными и может потребоваться определить их дополнительно. А определенный пользователем дефолтный конструктор никак не влияет на другие функции-члены, поэтому прописывать их явно нет необходимости, если сгенерированный компилятором вариант устраивает, разумеется.
Ну и помимо этого существуют еще и заповеди типа: "если вы определили конструктор копирования, то определите также и копирующий оператор присваивания" и т.п. Но все это не имеет отношения к случаю, описанному в твоем примере.
M>Вопрос в том, что не надо ли на всякий случай все конструкторы выписывать
В этом нет нужды (если основываться лишь на примере). Единственный определенный пользователем конструктор одновременно является и конструктором по умолчанию. Все остальные специальные функции-члены (конструкторы, деструктор и операторы присваивания) по-прежнему генерируются компилятором.
P.S. Это в том случае, когда пользователь определяет какую-нибудь специальную функцию-член (например, конструктор перемещения или копирования), тогда он может скрывать другие специальные функции-члены или делать их удаленными и может потребоваться определить их дополнительно. А определенный пользователем дефолтный конструктор никак не влияет на другие функции-члены, поэтому прописывать их явно нет необходимости, если сгенерированный компилятором вариант устраивает, разумеется.
Ну и помимо этого существуют еще и заповеди типа: "если вы определили конструктор копирования, то определите также и копирующий оператор присваивания" и т.п. Но все это не имеет отношения к случаю, описанному в твоем примере.