{ 왜냐하면, 일반적이기 때문이다. 정규형 할당 방식이 무엇인가? 비가상 operator=을 말하는 것이다. 가상 operator= 를 만들면 안되나? 모든 사람들이 일반적으로 operator=에 가상성을 부여하지 않기 때문에, 많이 혼란스러울 수 있기 때문에 만들면 안된다. 다형적 복사를 원한다면 virtual Clone 함수를 만들어서 사용 하는게 더 좋다. }
책 정리 검색 결과
{ 개체의 조각화는 무엇인가? 기반 클래스 B와 상속 클래스 D가 있다고 했을 때, D의 객체가 B의 객체로 잘리는 현상을 말한다. 예를 들 수 있는가? #include class B { public: B() : a_(0) { } public: virtual void Draw() { std::cout
{ 즉, 컴파일러가 만든 copy constructor 와 operator= 을 사용 할지, 내가 정의한 것들을 사용 할지, 아니면, 이것 자체를 사용 할지 말지를 명확하게 하라는 것이다. 왜냐하면, 컴파일러는 기본적으로 이 두 가지 fuction 을 만들기 때문이다. 그냥 가만히 있다가, 되니까 문제 없겟지 하다가, 되니까 그냥 맞아야지 가 된다. }
{ 여기서 말하는 일관된 방식은 무엇인가? 복사 생성자(T(const T&))를 정의했다면, 복사 할당자(operator=), 디스트럭터(~T()) 를 정의 하라는 것이다. 왜? 복사 생성자를 정의 했다는 의미는 무엇인가 특별한 멤버 변수를 갖는 다는 것을 의미한다. 그러므로, 복사 할당자나 디스트럭터나 특별히 무엇인가 작업을 해 주어야 한다는 것이다. 자신이 뿌린 씨앗은 자신이 거두어야 한다는 것을 의미하는 것과 같다. 복사 생성자만 그러하나? 의미를 볼땐 위의 3가지 중 하나라도 정의 했다면, 다 정의 해 주는게 좋다. 누가 좋다고 하는가? 허브 셔터와 안드레이 알렉산드레스쿠가 그런다. ... 예외는 없는가? 물론 있다. 굳이 3개를 짝으로 구현할 필요가 없다면, 안해도 된다. 이때는 애초에 정의할 ..
{ .. 실패하지 않는다가 아니라. 실패해서는 안된다가 더 적당할 듯 싶다. 왜 그럴까? 각개 격파해서 정리한다. 디스트럭터에서 실패하면 왜 안되는가? 객체의 소멸 시점은, 자신이 속한 지역을 벗어 날 때이거나, 명시적으로 없애고자 할 때이다. 자신이 속한 지역에서 벗어 날 때는 무척 광범위한 영역에서 발생 할 수 있는데, 대표적으로 값에 의한 전달을 이용하는 함수에서 많이 일어 날 수 있을 것 같다. 값이 복사 되고 예외가 발생 했다고 치자. 이때 예외가 발생해서 지역을 탈출 하려고 하는데, 탈출 시 "스택 되감기"가 이루어 지면서, 다시 소멸자가 호출 되어 지고, 여기서 예외가 발생 한다 치자. 그러면 예외 중에 예외가 발생 한 것이니, C++ 에선 그냥 프로그램을 죽이는 함수를 호출 한다. 프로그램..
최근댓글