나는 함수가 스택에서 호출하는 함수에 객체를 반환 할 때 호출하는 함수가 원래 객체의 복사본을 가져 오지만 스택이 unwind되면 바로 원래 객체의 소멸자가 호출된다고 생각했다. 그러나 다음 프로그램에서 소멸자는 한 번만 호출됩니다. 나는 그것이 두 번 부르기를 기대했다.소멸자가 함수에서 반환 된 객체에 대해 호출되지 않는 이유는 무엇입니까?
#include <iostream>
class MyClass
{
public:
~MyClass() { std::cout << "destructor of MyClass" << std::endl; }
};
MyClass getMyClass()
{
MyClass obj = MyClass();
return obj; // dtor call for obj here?
}
int main()
{
MyClass myobj = getMyClass();
return 0; // Another dtor call for myobj.
}
그러나 "소멸자 MyClass"는 한 번만 인쇄됩니다. 내 가정이 잘못되었거나 여기에 다른 일이 있습니까?
왜 작성 하시겠습니까? "MyClass obj = MyClass();" ? "MyClass obj;" 잘 할거야. 이것은 자바가 아닙니다;). –
그렇습니다. 자바 프로그래밍이 많이 있기 때문입니다. – Srikanth
@EvanTeran "왜 MyClass obj = MyClass();" "MyClass obj;"는 "이것들은 ** ** 않습니다. 일반적으로 동급. – curiousguy