게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c++에서 복사생성자에 대해 질문
게시물ID : programmer_10904짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 664회
댓글수 : 4개
등록시간 : 2015/06/06 00:33:17
아래의 소스는 원래call by reference라면  Person(const Person& i) 인데요
근데 call by value로 나타낸다면 아래의 소스처럼 된다는데요.
컴파일하면 어차피 컴파일에러가 나지만 만약에 제대로 컴파일이 된다면 Person obj3(obj2); 문장을 실행시 무한루프에 빠진다고 써 있어서 한번 오늘 강사님한테 물어보고, 혼자서 생각도 해봤는데요

처음에   Person obj3(obj2);를 실행하면 Person형의 obj3객체가 생성되면서 생성자 함수Person(const Person i)에 obj2가 매개변수로 대입되는데 이때 call by value에 의해서  obj2가 i로 메모리에 복사 되고, 또 이것은 Person obj3(i) 다시 말하면 i를 생성자의 매개변수로 하는 Person형의 obj3객체가 되고,이러면 Person(const Person i)와 형태가 같아지기 때문에 생성자 함수를 호출하게 되어서, call by value에 의해서 또 i가 생성자의 매개변수로 복사되고, 대입되어서, Person obj3(i) 가 되고, 또 생성자 함수를 호출해서 또 i가 매개변수로 대입되고  Person obj3(i) 가 되고 call by value에 의해서...생성자 함수를 호출해서...무한히 반복되는 것인거 같은데요.

생각해보면 이렇게 실행된다면 절대 cout<<"Person(const Person i)호출"<<endl;이 문장이 실행되지 않고 계속 call by value에 의해서 생성자의 매개변수가 메모리에 복사되고 그후 생성자 함수의 매개변수에 대입되고 매개변수가 복사되고 대입되고만 영원히 반복되는것 같은데 만약에 이 call by value에 의한 무한루프가 실행된다면 Person(const Person i)호출 메세지가 정말로 나오지 않는지 알고 싶네요.
그리고 제 생각이 틀렸다면 어떤 흐름으로 무한루프가 되는지 알려 주신다면 정말 좋겠네요.


#include <iostream>
using std::cout;
using std::endl;
using std::cin;

class Person
{
public:
    Person(){
    cout<<"Person()호출"<<endl;
    }
    Person(int i){
    cout<<"Person(int i)호출"<<endl;
    }
    Person(const Person i)
    {
    cout<<"Person(const Person i)호출"<<endl;
    }
};

int main()
{
    Person obj1;
    Person obj2(10);
    Person obj3(obj2);
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호