게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
본삭금)C++ 복사생성자의 소멸자 질문!
게시물ID : programmer_12589짧은주소 복사하기
작성자 : 베오베감이다
추천 : 0
조회수 : 462회
댓글수 : 6개
등록시간 : 2015/08/06 15:25:33
옵션
  • 본인삭제금지
음 이해가 너무안되서 질문도 어떻게 올려야할지 감이 안잡히네요 ㅠㅠ

질문이 정확해야 답변도 쉬운법인데 제가 이해가 덜되서 죄송합니다..

다름이 아니고 

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

이렇게 함수호출 전후로 껴버리더군요 ..

소멸자가 두번이 생성된건지 .. 그건 아닌것같은데

어떻게 저렇게 나왔는지 이해가 안됩니다 ㅠㅠ

애초에 제가 이런쪽으로 너무 약해요 

메모리가 할당되고 이 메모리가 사라졌다가 다시 함수호출되면서 할당되고 어디에 저장이되고 

이런 쪽으로요 ㅠㅠ

질문과 별도로 실례가 되지않는다면

이쪽에 대해서도 도움될만한 조언도 해주시면 감사하겠습니다!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호