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