자원관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // 항목 13에서 가져온 예제 void main() { std::tr1::shared_ptr pInv(createInvestment()); // 투자금이 유입된 이후로 경과한 날수 int dayHeld(const Investment *pi); // 에러 int days = daysHeld(pInv); /* daysHeld함수는 Investment * 타입을 원하는데 std::tr1::shared_ptr타입의 객체를 넘기고 있음 std::tr1::shared_ptr을 Investment *로 변환하고 싶어짐 */ } Colored by Color Scrip..
자원관리 클래스의 복사 동작에 대해 진지하게 고찰하자. 객체 복사에서는 컴파일러가 제공하는 디폴트 함수(복사 생성자, 대입연산자등)가 자신이 원하는 동작을 못한다면 직접 설계하여야 한다. 힙 기반 자원 관리의 스마트 포인터는 힙에 생기지 않는 자원의 처리로는 부적합하다. 이 경우 자원 관리 클래스를 만들어야 할 필요성이 있다. 예제 Mutex 타입의 동기화 객체의 잠금과 해지 클래스 생성 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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 void lock(Mutex *pm); // pm이 가리키는 뮤텍스의..
자원 관리에는 객체가 그만!1234567891011121314151617181920//여러 형태의 투자를 모델링한 클래스 계통의 최상위 클래스class Investment { . . . }; /*Investment 클래스 계통에 속한 클래스의 객체를 동적 할당하고 그 포인터를 반환합니다. 이 객체의 해제는 호출자 쪽에서 직접 해야 합니다.*/Investment* createInvestment(); void f(){ //팩토리 함수를 호출합니다. Investment *pInv = createInvestment(); // pInv를 사용합니다. // TODO // 객체를 해제합니다. ..
객체의 모든 부분을 빠짐없이 복사하자 객체의 안쪽 부분을 캡슐화된 객체 지향 시스템 중 설계가 잘 된 것들을 보면 복사 생성자와 복사 대입 연산자 두가지가 있고, 이 둘을 통틀어 객체 복사 함수라고 부른다. 컴파일러가 생성한 복사 함수를 쓰지 않고 개발자가 직접 객체 복사 함수를 선언한다면 구현한 복사 함수가 확실히 틀린 경우에도 알려주지 않는다. 예제 1 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 void logcall(const std::string& funcName); //로그 기록내용을 만든다. class Customer { public: Customer(const Customer& rhs); Customer& operat..
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 {..
- Total
- Today
- Yesterday
- Build
- ip
- OpenSource
- PowerShell
- 블루버블
- 울릉도
- 블루버블다이브팀
- C#.NET
- C# 고급 기술
- 서귀포
- 티스토리챌린지
- 윈도우
- 서귀포블루버블
- Linux
- C++
- script
- 현포다이브
- 스쿠버다이빙
- 블루버블다이빙팀
- Windows
- 외돌개
- C
- 패턴
- 제주도
- DLL
- 성산블루버블
- 스쿠버 다이빙
- 암호화
- C#
- CMake
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |