Могу ли я передать указатель на поле производного класса суперконструктору, если суперконструктор не использует этот указатель?

0

Если у меня есть производный класс, я знаю, что поля не создаются при вызове суперконструктора. Но могу ли я передать указатель на одно такое поле (полученное с & field) суперконструктору, если я знаю, что суперконструктор не собирается разыменовывать указатель?

В частности, я хочу знать, будет ли вызов в поле & корректно вести себя и указывать на раздел памяти, который в конечном итоге будет содержать это поле.

  • 3
    Это описано в [basic.life] / 5, выдержка: «До того, как началось время жизни объекта, но после того, как было выделено хранилище, которое будет занимать объект, или после того, как закончилось время жизни объекта и до хранилища. Если занятый объект используется повторно или освобождается, любой указатель, который ссылается на место хранения, где объект будет или был расположен, может использоваться, но только ограниченным образом ». (Примечание: во время вызова ctor базового класса члены-члены производного класса еще не «созданы», поэтому их время жизни могло не начаться.)
  • 1
    Другой релевантной частью является [class.cdtor] / 3 "Чтобы сформировать указатель (или получить доступ к значению) прямого нестатического члена объекта obj , должно начаться построение obj , а его уничтожение не должно быть завершено, в противном случае вычисление значения указателя (или доступ к значению элемента) приводит к неопределенному поведению. "
Теги:
pointers
constructor
superclass

1 ответ

2
Лучший ответ

Да, хотя на самом деле это будет в лучшем случае сомнительным.

  • 0
    Спасибо, я только что понял, что мой супер-конструктор разыменовывает указатель, поэтому мне придется сделать это по-другому, но все же это полезно знать для дальнейшего использования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню