【问题标题】:Assigning reference returned from method to variable将从方法返回的引用分配给变量
【发布时间】:2017-12-23 21:26:38
【问题描述】:
class A{
/.../
};

class B{
  public:
    A& foo()
    {
       A *bar = new A;
       return *bar;
     }
};

int main()
{
   A varA;
   B varB;
   varA = varB.foo();
   return 0;
}

当这行代码执行varA = varB.foo() 时会发生什么?是否会调用 foo 中创建的对象的析构函数(在复制/移动赋值运算符函数调用之后)?

【问题讨论】:

  • "执行此行会发生什么varA = varB.foo()"内存泄漏
  • foo() 返回对堆上对象的引用。 varA 是从该对象复制分配的,然后泄漏。
  • 不,使用new 创建的对象的析构函数不会被调用。前往en.cppreference.com/w/cpp/language/new 并以此为起点,进一步了解该主题。

标签: c++ c++11 reference operator-overloading


【解决方案1】:

不会调用析构函数,分配的对象会泄漏。

【讨论】:

  • 除非A的复制构造函数做了一些奇怪的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多