Re: Адрес конструктора
От: rg45 СССР  
Дата: 10.07.19 15:22
Оценка: +3
Здравствуйте, nen777w, Вы писали:

N>По каким соображением в С++ запретили брать адрес конструктора, если по сути он есть обычная функция?

N>И есть ли возможность таки этот адрес получить?

В том-то и дело, что конструкторы — это не обычные функции, а специальные. Кострукторы не имеют имен, и используются только для инициализации объектов. Время жизни объекта начинается ПОСЛЕ выхода из конструктора. Другими словами, конструктор выполняется, когда время жизни объекта еще не началось и это принципиальное отличие — вызов конструктора для сконструированного объекта недопустим и невозможен (не путать с inplace конструированием, которое является инициализацией НОВОГО объекта с повторым использованием хранилища (storage)). В то же время указатели на функции-члены подразумевают использование с инициализированными объектами, что идет в разрез с требованиями, предъявляемыми к конструкторам.

15.1 Constructors
2 A constructor is used to initialize objects of its class type. Because constructors do not have names, they are never found during name lookup; however an explicit type conversion using the functional notation (8.2.3) will cause a constructor to be called to initialize an object. [ Note: For initialization of objects of class type see 15.6. —end note ]

--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 10.07.2019 18:08 rg45 . Предыдущая версия . Еще …
Отредактировано 10.07.2019 15:35 rg45 . Предыдущая версия .
Отредактировано 10.07.2019 15:24 rg45 . Предыдущая версия .
Отредактировано 10.07.2019 15:23 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.