假设我有一个类

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;”,从内存管理的角度来看,后果是什么?

非常感谢!

最佳答案

引用cannot是“可重新设置的”,setBar()只是将bar的内容复制到_bar引用的对象。

如果您需要这样的功能,请改用指针。另外,如果您只是使用指针,那么您的用法示例将更加简单。

10-05 19:15