일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- exception
- lua
- 영화 리뷰
- 상속
- effective stl
- operator new
- implicit conversion
- 다형성
- 언리얼
- 영화
- 참조자
- Smart Pointer
- UE4
- reference
- virtual function
- resource management class
- 반복자
- 비교 함수 객체
- Effective c++
- 오블완
- 예외
- 게임
- 티스토리챌린지
- 루아
- 함수 객체
- c++
- 스마트 포인터
- more effective c++
- 암시적 변환
- 메타테이블
- Today
- Total
목록Smart Pointer (4)
스토리텔링 개발자
항목 29. 참조 카운팅(Reference Counting) 참조 카운팅이란여러 개의 객체들이 똑같은 값을 가졌으면, 각각이 하나의 데이터를 공유하게 하여, 데이터의 양을 절약하는 기법이다. 참조 카운팅의 동기힙 객체의 관리를 편하게 하기 위함이다.힙에 할당된 객체는 소유권을 추적하는 일이 상당히 까다롭다.하지만 참조 카운팅을 사용하면 소유권을 일일이 추적하지 않아도 된다.똑같은 값을 가지고 있는 객체들이 값을 각각 가지게 되면 낭비이다. 참조 카운팅 기본 구현법class String{public: // 생성자 String(const char* initValue = ""); String(const String& rhs); // 소멸자 ~String(); ..
항목 28. 스마트 포인터(Smart Pointer) 스마트 포인터를 사용하는 이유생성과 소멸 작업을 조절할 수 있다.스마트 포인터가 생성되고 소멸되는 시기를 사용자가 결정할 수 있다.초기값을 스마트 포인터가 컨트롤하므로, 쓰레기값 문제가 없다.객체를 알아서 소멸시켜주므로 리소스 누수가 없다.복사와 대입 동작을 조절할 수 있다.스마트 포인터가 복사되고 대입될 때의 일을 사용자가 결정할 수 있다.깊은 복사와 얕은 복사를 원하는 대로 정의할 수 있다.혹은 복사 대입을 전혀 사용하지 못하도록 막을 수도 있다.역참조 동작을 조절할 수 있다.스마트 포인터가 가리키는 객체를 가져오려고 할 때 일어나는 일을 결정할 수 있다.지연 방식 데이터 / 명령어 가져오기(fetching)(항목 17 참조) 스마트 포인터..
항목 9 : 리소스 누수를 피하는 방법의 정공은 소멸자이다. 지역 리소스에 대한 포인터지역 리소스(스택에서 생긴 리소스)를 조작할 때, 포인터는 부적절할 수 있다.소멸자가 불리지 않는 상황이 발생할 수 있기 때문이다.즉, 리소스 누수가 발생할 수 있다는 뜻이다.class ALA{public: virtual void processAdoption() = 0; ...};class Puppy : public ALA{public: virtual void processAdoption(); ...};class Kitten : public ALA{public: virtual void processAdoption(); ...};// s로부터 동물 정보를 읽어서// 적절한 타입의 객체를..
항목 17. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 맞추자 매개변수 평가다음 코드는 자원을 흘릴 가능성이 있다.void processWidget(shared_ptr pw, int priority);...processWidget(shared_ptr(new Widget), priority());컴파일러는 호출 코드를 만들기 전, 매개변수로 넘겨지는 인자를 평가한다.두 번째 인자(priority 함수)는 호출문 뿐이다.첫 번째 인자(shared_ptr(new Widget)은 두 부분으로 나뉘어져 있다."new Widget" 표현식을 실행하는 부분shared_ptr 생성자를 호출하는 부분그러므로 컴파일러는 다음 세 가지 연산을 위한 코드를 생성한다.priority를 호출한..