Мой вопрос прост, следующий код безопасен?
struct Parent {
B* _a;
Parent(B* a) : _a(a) {}
};
struct Child : public Parent {
B _b;
Child() : Parent(&_b), _b(2){};
};
int main() {
Child c;
return 0;
}
Еще два очка:
- Мне интересна часть передачи ссылки на объект-член родителю.
- Под безопасным я подразумеваю, что будет выделено
_b
(и его адрес памяти) и этот код будет работать независимо от того, какой компилятор я использую.
Заранее спасибо.
пояснение
под безопасным я фактически имел в виду, что адрес памяти был действительным, поскольку я уже знал, что он не был инициализирован.
другие заметки
В моем реальном коде я хотел сохранить объект типа B
как указатель на его базовый класс A
, например:
struct Parent {
A* _a;
Parent(A* a) : _a(a) {}
};
struct Child : public Parent {
B _b;
Child() : Parent(&_b), _b(2){};
};
int main() {
Child c;
return 0;
}
Что, если я правильно понимаю, ответ AndreyT, является незаконным. Я думаю, я попытаюсь сделать это по-другому, так как этот подход был подвержен ошибкам. (Я мог бы забыть, что я не мог использовать этот указатель и что-то сделать с ним в моем следующем рефакторе).