Предположим, у меня есть класс
class Foo
{
public:
~Foo() { delete &_bar; }
void SetBar(const Bar& bar)
{
_bar = bar;
}
const Bar& GetBar() { return _bar; }
private:
Bar& _bar;
}
И я использую этот класс следующим образом (предположим, что у Bar есть конструктор рабочей копии)
Foo f;
f.SetBar(*(new Bar));
const Bar* bar = &(f.GetBar());
f.SetBar(*(new Bar(bar)));
delete bar;
У меня есть ситуация, похожая на эту (в коде, который я не писал), и когда я отлаживаю в точке останова, установленной на "панели удаления"; линия, я вижу, что
&f._bar == bar
У меня такой вопрос: почему & f._bar и bar указывают на один и тот же блок памяти, и если я опускаю «delete bar;», каковы последствия с точки зрения управления памятью?
Большое спасибо!