У меня есть три класса: Base, Derived (наследует от Base) и Stats (который использует Base).
Программа создает производный объект, который может быть удален и восстановлен несколько раз в течениевыполнение.Он также устанавливает объект Stats, который будет создан только один раз, но для этого необходимо вызвать функции на базе производного объекта.Поскольку производный объект может быть реконструирован, объект Stats будет нуждаться в ссылке на указатель Base, так как значение указателя может измениться.Однако когда я создаю новый Derived в main, ссылка в классе Stats не видит новый объект.
В приведенном ниже примере d и m_obj оба равны NULL, затем, когда я создаю новый производный экземпляр, m_obj по-прежнему равен NULL.Это не имеет смысла для меня.Что еще больше смущает, так это то, что если я изменю строку Derived* d = 0;
на Base* d = 0;
, она будет работать нормально.Есть мысли?
#include <iostream>
using namespace std;
class Base {
};
class Derived : public Base {
};
typedef Base* const base_ptr;
class Stats {
public:
Stats(Base * const &obj) : m_obj(obj) {
cout << "In Stats():" << endl;
cout << " m_obj = " << m_obj << endl;
}
void f() const {
cout << "In f:" << endl;
cout << " m_obj = " << m_obj << endl;
}
private:
base_ptr &m_obj;
};
int main() {
Derived* d = 0;
cout << "d = " << d << endl;
Stats s(d);
d = new Derived();
cout << "d (after new) = " << d << endl;
s.f();
return 0;
}