48:30 Подскажите, пожалуйста, зачем конструктору копирования и оператору присваивания быть приватными методами класса, ведь, delete и так запрещает их использование или так по код стайлу правильнее? P. S. Спасибо, за такие замечательные лекции!
Получается, что создание собственного литерала довольно дорогое удовольствие, т.к. сначала будет создан объект из этого литерала, а потом будет вызываться конструктор копирования: My x = 12_my; А затем еще и деструктор для 12_my.
Это верно, если компилировать со стандартами, раньше чем C++17, и с флагом компиляции -fno-elide-constructors (этот флаг явно запрещает компилятору делать оптимизации промежуточных объектов, явно не прописанные в стандарте). Создалось бы аж целых три объекта, да. Если не включать этот флаг, компиляторы это и так умели оптимизировать. Начиная с C++17 это случай гарантированного нам стандартом RVO, так что полюбому (даже с этим флагом) будет только один объект создаваться сразу на нужном месте.
у вас не только пространственные, но и временные рамки не совпадают на пару месяцев. А вообще хороший тон - смотреть лекцию в СИЗе, тогда все опасения будут сведены к минимуму.
Кайф
Это сатир?
Сарказм
48:30 Подскажите, пожалуйста, зачем конструктору копирования и оператору присваивания быть приватными методами класса, ведь, delete и так запрещает их использование или так по код стайлу правильнее?
P. S. Спасибо, за такие замечательные лекции!
Получается, что создание собственного литерала довольно дорогое удовольствие, т.к. сначала будет создан объект из этого литерала, а потом будет вызываться конструктор копирования: My x = 12_my;
А затем еще и деструктор для 12_my.
Это верно, если компилировать со стандартами, раньше чем C++17, и с флагом компиляции -fno-elide-constructors (этот флаг явно запрещает компилятору делать оптимизации промежуточных объектов, явно не прописанные в стандарте). Создалось бы аж целых три объекта, да. Если не включать этот флаг, компиляторы это и так умели оптимизировать. Начиная с C++17 это случай гарантированного нам стандартом RVO, так что полюбому (даже с этим флагом) будет только один объект создаваться сразу на нужном месте.
Спасибо большое за ответ.
Почему нельзя написать Singletoon::ptr = nulltptr? Зачем Singleton* перед ставится
потому что такой тип переменной ptr в struct Singleton
@@user-nn7iq8jt1f Но разве это не просто присваивании полю? Или это инициализация полей статических вне класса? 56:09 @user-nn7iq8jt1f
это не присваивание, это его инициализация, поэтому нужно писать тип переменной. В классе написано было его объявление.
Чел иди лечись, который чихает и кашляет всю лекцию. Заражаешь меня через монитор
у вас не только пространственные, но и временные рамки не совпадают на пару месяцев. А вообще хороший тон - смотреть лекцию в СИЗе, тогда все опасения будут сведены к минимуму.