반응형

복사생성자 3

복사 생성자의 인수는 왜 레퍼런스를 사용하나?

복사 생성자는 클래스의 객체를 생성할 때 이미 존재하는 동일 클래스의 다른 객체를 그대로 복사하기 위해 필요하다. 클래스는 일종의 데이터 집합이다. 이 데이터를 다루는 도구인 멤버함수는 동일 클래스의 객체라면 공유를 하는 개념이기 때문에 객체의 복사에 있어서는 데이터(멤버변수)의 복사만 생각하면 된다. 왜냐면 데이터의 경우는 객체마다 고유하기 때문이고, 이를 공유하면 문제가 발생하기 때문이다.(예를 들어 특정 객체의 파괴 시 데이터를 공유할 경우 문제 발생). 따라서 C++문법에서 복사 생성자를 다룰 때 항상 따라다니는 문제인 얕은 복사와 깊은 복사에 관한 이야기가 중요한 문법적 주제가 된다. 초심자에게는 포인터와 메모리에 대한 개념이 확실히 이해되고 난 후에 이해할 수 있는 난코스라고 생각하면 된다. ..

프로그래밍/cpp 2015.10.05

복사 생성자 - 얕은복사 깊은복사 C++

C++에서 생성자의 주된 임무는 클래스 멤버 변수의 초기화 일 것이다. 이러한 생성자는 기본적으로 인수의 유무에 따라서 인수의 형태에 따라서 몇가지 이름을 붙인다. 기억해둘 생성자에는 디폴트 생성자, 복사 생성자가 있고 결국 생성자이고, 형태 또한 생성자의 형태에서 벗어나지 않는다. 그러면 왜 이렇게 구분해 놓은 것인가? 그러면 생성자의 형태를 살펴본 후 이야기하자. 아주 간단한 클래스와 생성자를 만들었다. 생성자의 기본적인 형태는 위 코드처럼 반환타입이 존재하지않고, 클래스의 이름과 똑같다. 그 외에는 일반적인 함수의 형태를 띠게된다. 생성자는 생성자라는 이름처럼 객체의 생성과 동시에 호출이 되게 되어있다. myClass A; 는 myClass A = myClass(); 와 동일한 구문이다. 해석하자면..

프로그래밍/cpp 2014.03.18

디폴트 복사 생성자(얕은복사,깊은복사)

디폴트 복사 생성자(얕은복사,깊은복사), gcc 4.8.1 버전 과연 얕은 복사가 되는걸까? 먼저 문제를 발견하기 위해서 얕은복사가 되는지 코드를 먼저 짜보았다. 참고는 예전에 듣던 유명한 c++강의의 소스를 참조를 했다. 오래전 강의라 그런가? deprecated 경고가 난다. 2014/01/10 - [프로그래밍/c++] - deprecated conversion from string constant to 'char*' 이경우 char * 를 const char *로 바꿔주면 된다. 아래처럼.. 전부다바꾸면 안되고 밑줄 친 부분만 바꿔준다. 그럼 아래처럼 성공적으로 컴파일된다. 그럼 과연 얕은 복사가 되었나? 아무런 조치도 취하지 않았는데 깊은 복사가 되었다. 새로운 컴파일러의 승리인가? 주소값을 체크..

프로그래밍/cpp 2014.01.10
반응형