Operator= 에서는 자기대입에 대한 처리가 빠지지 않도록 하자. 타이틀 입력부분C++ 연산자 operator= 에서는 자기대입에 대한 처리가 빠지지 않도록 하자. 자기대입(중복참조,자기참조)은 같은 객체를 참조 할 수 있는 위험이 있다. 자기참조,자기대입(Self Assignment)이란? 객체가 자신에 대해 대입 연산자를 적용하는 것을 말합니다. ex)중복참조: 여러 곳에서 하나의 객체를 참조하는 상태 예제 1 2 3 4 5 6 Widget& Widget::operator=(const Widget& _rhs) { delete pb; //현재의 비트맵 사용을 중지합니다. pb = new Bitmap(*_rhs.pb); //이제 rhs의 비트맵을 사용하도록만듭니다 return *this; //*thi..
대입 연산자는 *this의 참조자를 반환하게 하자 대입 연산은 우측연관(Right Associative) 연산이다. 1 2 3 4 5 6 void main() { int x, y, z; x = y = z = 15; x = ( y = ( z = 15 ) ); } cs 위와 같이 대입연산의 경우 우측부터 대입이 사슬처럼 이어진다. 좌변 객체의 참조자를 반환하게 만들자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 class Widget { private : int m_nData; public : void Set(const int _nValue) { m_nData = _nValue; } int Get() const {..
객체 생성 및 소멸 과정 중, 절대로 가상 함수를 호출하지 말자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class Transaction { public: Transaction() { logTransaction(); } virtual void logTransaction() const=0; }; class butTransaction: public Transaction { public: butTransaction(){}; virtual void logTransaction() const; }; void mian() { BuyTransaction b; } Colored by Color Scripter cs 상속 관계에서 생성자에 쓰이는 virtual ..
예외가 소멸자를 떠나지 못하도록 붙들어 놓자 소멸자로 부터 예외가 발생 하는 경우를 C++ 언어에서 막는 것은 아니지만, 실제 상황을 들춰보면 확실히 우리가 막을 수밖에 없다. 예제 1 1 2 3 4 5 6 7 8 9 10 11 12 13 class Widget { public: Widget(); ~Widget() {….} }; void main() { std::vector v; } cs 1. vector 타입의 객체가 v 일 경우 객체를 소멸시킬 책임은 바로 벡터에게 있다. 2. 10개의 객체 v가 vector에 있을 경우 첫 번째 객체가 소멸할 때 예외가 생기고 두 번째 객체가 또 예외가 생길 경우 C++입장에서는 감당하기 힘들다. 3. 위 2번의 일 경우 예외가 동시에 발생한 조건에 따라 프로그램 ..
다형성을 가진 기본 클래스에서는 반드시 가상 소멸자를 선언하자C++에서는 다형성을 가진 기본 클래스의 경우, 소멸자를 반드시 가상 소멸자로 선언해야 합니다. 그렇지 않으면, 기본 클래스 포인터를 통해 파생 클래스 객체를 삭제할 때 파생 클래스의 소멸자가 호출되지 않아 메모리 누수나 불완전한 소멸 문제가 발생할 수 있습니다.기본 클래스의 비가상 소멸자를 사용할 경우, C++ 표준에 따르면 기본 클래스 포인터를 통해 파생 클래스 객체를 삭제하는 것은 미정의 동작이 됩니다.예제 1: 비가상 소멸자의 문제점class TimeKeeper{public: TimeKeeper(); ~TimeKeeper(); // 비가상 소멸자};int main(){ TimeKeeper* ptk = getTimeKeep..
컴파일러가 자동으로 생성하는 함수를 불필요할 때 명시적으로 금지하자클래스를 사용할 때, 때로는 복사 생성자와 복사 대입 연산자의 사용을 금지하고 싶을 때가 있습니다. 그렇다고 해서 우리가 이를 구현하지 않았다고 해서 자동으로 금지되는 것이 아니라, 컴파일러가 자동으로 생성해버립니다. 이를 방지하는 방법은 명확히 복사 생성자와 복사 대입 연산자의 사용을 금지하는 것입니다.문제 상황class CA{ // 아무 것도 구현하지 않음};int main(){ CA ca; CA ca2; CA ca3(ca); // 복사 생성자 호출 ca2 = ca; // 복사 대입 연산자 호출}위의 예제에서 CA 클래스는 복사 생성자와 복사 대입 연산자가 명시적으로 정의되지 않았습니다. 그럼에도 불구하고..
- Total
- Today
- Yesterday
- PowerShell
- C
- 울릉도
- 스쿠버다이빙
- Build
- 외돌개
- script
- CMake
- C#
- effective
- C++
- 제주도
- Linux
- 네트워크 정보
- C# 고급 기술
- Windows
- DLL
- OpenSource
- 현포다이브
- C#.NET
- 패턴
- 블루버블다이브팀
- 블루버블
- Effective c++
- 성산블루버블
- 암호화
- 서귀포
- 스쿠버 다이빙
- 블루버블다이빙팀
- 서귀포블루버블
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |