복사 생성자 호출 시점
전갈자리
복사 생성자 호출 시점을 테스트 하고 싶어아래 코드를 작성해보았습니다.
/******************************************************************************************************/
#include iostream
using namespace std;
class a{
int m_n;
public:
a(int n) {
cout 일반 생성자 호출 endl;
m_n = n;
}
a(const a& rvalue) {
cout ##### 복사 생성자 호출 ##### endl;
m_n = rvalue.m_n;
}
~a() {
cout 소멸자 호출 : m_n( m_n ) endl;
}
void showdata() {
cout showdata 호출 : m_n( m_n ) endl;
}
};
void funcarg(a arg) {
cout func 함수 시작 endl;
cout func 함수 끝 endl;
}
a funcret() {
cout funcret 함수 시작 endl;
a a(-1);
return a;
}
int main() {
cout ************************************************ endl;
a a(1);
cout ************************************************ endl;
cout 1. 기존에 생성 된 객체로 새로운 초기화 시 endl;
a b = a;
cout ************************************************ endl;
cout 2. 함수 호출 시 객체를 값에 의한 전달 endl;
funcarg(a);
cout ************************************************ endl;
cout 3. 함수 내에서 객체를 값에 의해 리턴 endl;
funcret();
cout ************************************************ endl;
}
/******************************************************************************************************/
제가 알고 있기론 복사 생성자가 호출되는 시점이
1. 기존에 생성 된 객체로 새로운 초기화 시
2. 함수 호출 시 객체를 값에 의한 전달
3. 함수 내에서 객체를 값에 의해 리턴
로 알고 있는데 직접 작성하여 테스트 해보니 1, 2번은 정상적으로 복사 생성자가 호출되는데 3번과 같은 경우에는 복사 생성자가 호출이 되지 않더라구요. (funcret 함수)
funcret 함수 내 지역 변수로 리턴하면 복사 생성자가 호출되지 않는 반면에 글로벌 변수나 동적 생성한 변수를 리턴하면 이때는 복사 생성자가 호출되더군요.
예)
a g(10);
a funcret() {
cout funcret 함수 시작 endl;
return g;
}3번 같은 경우에 왜 복사 생성자가 호출되지 않는지궁금합니다. 테스트 코드가 잘못되었다면 어떤 식이 3번 경우에 해당하는지 답변 부탁드립니다. 감사합니다~^^
-
거북이
그렇군요...감사합니다~^^
-
UniQue
저 객체는 안쓰니까 아예 만들지도 않는거죠.
쓰면 안 없앱니다. -
god
그런데 최적화 한다는게 호출은 하는건지 아니면 경우에 따라 호출은 안 한다는건지 궁금하네요 ^^a
-
도란도란
아...그런거군요~주말 내내 찾아보다가 수다님 말처럼 컴파일러에 따라 다르다는 웹글을 딱 한번 봤어요...확신할 수가 없어서 집에서 g++ 에서 vc 에서 해봐도 복사생성자 호출결과가 안 나와서 답답했는데...웹상에서 컴파일 되다니 codepad.org 신기하세요~감사합니다~^^
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2655352 | 동영상 플래이어 (2) | 머슴밥 | 2024-05-19 |
2655320 | GList를 사용하는데 에러가 발생합니다. 도와주세요~~ | 찬늘봄 | 2024-05-18 |
2655291 | 자바 초보입문했는데요~~ | 이퓨리한나 | 2024-05-18 |
2655235 | xml연동 갤러리 생성관련 질문입니다. (2) | 난새 | 2024-05-18 |
2655205 | C++ 포인터 if | WatchOut | 2024-05-17 |
2655150 | 모바일 웹 환경을 구축을 할때의 콘텐츠 이미지 사이즈 (2) | 레오 | 2024-05-17 |
2655122 | 엥;; getMonth() 왜이렇게 나타나죠? (6) | 초코맛캔디 | 2024-05-17 |
2655095 | 구구단 질문이요 (3) | 하예진 | 2024-05-16 |
2655064 | RSA.js 파일 구할 수 있을가요.. 있으신분 첨부좀 해주세요.. | 얀 | 2024-05-16 |
2655009 | 유료테마 사려고 하는데 데모파일이 없다면 | 에드가 | 2024-05-16 |
2654980 | cximage를 통해 jpg파일을 받아와 윈도우에 뿌리는 프로그램을 만드는중인데 꼬였습니다. (4) | 하린 | 2024-05-15 |
2654922 | 고도몰 3차 4차 이상 카테고리 표출되게.. (7) | 유메 | 2024-05-15 |
2654874 | 제이쿼리랑 자바스크립트 학원 추천좀부탁드릴게요 (7) | 향율 | 2024-05-14 |
2654843 | 탭버튼 코딩시 마우스오버가 접근성에 왜 어긋나는지 궁금합니다... (1) | 걸때 | 2024-05-14 |
2654814 | 중국어 인코딩 관련해서 질문요,,, (5) | 화이트캣 | 2024-05-14 |
2654783 | 이 알고리즘 한줄한줄 해석좀 부탁드립니다. (1) | 요루 | 2024-05-14 |
2654764 | t 탭 질문이여. (3) | 눈 | 2024-05-13 |
2654737 | 크롬 인쇄하기 오류 (멈춤현상) | 아라 | 2024-05-13 |
2654708 | ie6에서 margin 문제 (5) | 너만 | 2024-05-13 |
2654681 | 아까 올렸던 질문의 액션코딩 (3) | 큰꽃들 | 2024-05-13 |