음 이해가 너무안되서 질문도 어떻게 올려야할지 감이 안잡히네요 ㅠㅠ
질문이 정확해야 답변도 쉬운법인데 제가 이해가 덜되서 죄송합니다..
다름이 아니고
c++ 공부중에 복사생성자에 대해서 공부하고 있습니다
그중에서도 호출 시기에 대해서 공부하고 있는데요
클래스를 정의하고 클래스 외부에 함수를 정의한뒤에
메인에서 함수를 호출하는 내용입니다.
#include <iostream>
using namespace std;
class SoSimple
{
private:
int num;
public:
SoSimple(int n) : num(n)
{ }
SoSimple(const SoSimple& copy) : num(copy.num)
{
cout<<"called SoSimple(const SoSimple& copy)"<<endl;
}
void ShowData()
{
cout<<"num: "<<num<<endl;
}
/*~SoSimple()
{
cout<<"called destructor"<<endl; 일단 주석처리 하겠습니다!
}*/
};
void SimpleFuncObj(SoSimple ob)
{
ob.ShowData();
}
int main(void)
{
SoSimple obj(7);
cout<<"함수호출 전"<<endl;
SimpleFuncObj(obj);
cout<<"함수호출 후"<<endl;
return 0;
}
처음 예제에서 보인 건 주석이 없는 소스였고
결과는
함수호출 전
Called SoSimple(const SoSimple& copy)
num: 7
함수호출 후
이렇게 나왔습니다
그런데 주석을 제거하고 소멸자가 추가되면 저 사이에 언제 어떻게 끼게 되는지 궁금해서 넣어봤더니
함수호출 전
Called SoSimple(const SoSimple& copy)
num: 7
called destructor
함수호출 후
called destructor
이렇게 함수호출 전후로 껴버리더군요 ..
소멸자가 두번이 생성된건지 .. 그건 아닌것같은데
어떻게 저렇게 나왔는지 이해가 안됩니다 ㅠㅠ
애초에 제가 이런쪽으로 너무 약해요
메모리가 할당되고 이 메모리가 사라졌다가 다시 함수호출되면서 할당되고 어디에 저장이되고
이런 쪽으로요 ㅠㅠ
질문과 별도로 실례가 되지않는다면
이쪽에 대해서도 도움될만한 조언도 해주시면 감사하겠습니다!