重新分配参考

Jes*_*son 5 c++ memory-leaks reference

假设我有一堂课

class Foo
{
  public:
    ~Foo() { delete &_bar; }
    void SetBar(const Bar& bar)
    {
      _bar = bar;
    }
    const Bar& GetBar() { return _bar; }
  private:
    Bar& _bar;
}
Run Code Online (Sandbox Code Playgroud)

我对这个类的用法如下(假设Bar有一个工作副本构造函数)

Foo f;
f.SetBar(*(new Bar));
const Bar* bar = &(f.GetBar());
f.SetBar(*(new Bar(bar)));
delete bar;
Run Code Online (Sandbox Code Playgroud)

我有一个类似于这种情况(代码我没写)和当我在"删除栏"上设置的断点调试时 我看到了

&f._bar == bar
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么&f._bar和bar指向相同的内存块,如果我省略"删除栏",从内存管理的角度来看,有什么后果?

非常感谢!

sth*_*sth 8

引用不能 "重新安装",setBar()只是将内容复制bar到引用的对象_bar.

如果您需要这样的功能,请使用指针.如果你只是使用指针,你的使用示例也会简单得多.