2017-12-23 29 views
-4
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에서 생성 된 객체에 대한 소멸자 (복사/이동 할당 연산자 호출 후)가 호출 되나요?메서드에서 변수로 반환 된 참조 할당

+2

_ "이 줄이 실행되면 어떻게 될까? varA = varB.foo()'"_ 메모리 누수 – user0042

+1

'foo()'는 힙에있는 객체에 대한 참조를 반환합니다. 'varA'는 그 객체로부터 복사 할당되고, 그 다음 유출됩니다. –

+1

아니요,'new'로 생성 된 객체의 소멸자는 호출되지 않습니다. http://en.cppreference.com/w/cpp/language/new로 이동하여 주제에 대해 더 자세히 배우기위한 출발점으로 사용하십시오. –

답변

1

소멸자가 호출되지 않고 할당 된 객체가 누출됩니다.

+0

'A'의 복사 생성자가 이상한 것을하지 않으면. – juanchopanza