일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 비교 함수 객체
- lua
- UE4
- resource management class
- 참조자
- 게임
- Vector
- operator new
- effective stl
- 영화
- reference
- implicit conversion
- 상속
- c++
- 예외
- Smart Pointer
- 루아
- 티스토리챌린지
- 스마트 포인터
- more effective c++
- 다형성
- exception
- 메타테이블
- 반복자
- Effective c++
- 오블완
- 언리얼
- 암시적 변환
- virtual function
- 영화 리뷰
- Today
- Total
목록스마트 포인터 (5)
스토리텔링 개발자
항목 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를 호출한..
개요메모리 관리는 C++의 난점 중 하나입니다. 스택에 할당된 메모리는 범위만 잘 지켜주면 대부분은 괜찮지만,힙에 할당한 메모리는 물가에 내놓은 갓난 아이처럼 끝까지 잘 지켜봐 줘야 합니다.자칫 잘못하면 그대로 소중한 메모리의 누수로까지 이어집니다. 좀 더 편하게 메모리 관리를 할 수 있는 방법은 없을까요? 그런 고민에서 생겨난 것이 이름처럼 스마트한 스마트 포인터입니다. 이 스마트 포인터는, 이젠 준 필수 기능이 되었습니다.이전까진 시험적으로 사용해오다가, 모던 C++부터는 정식 라이브러리에 완전히 편입되기까지 했죠. 또한 언리얼 역시 이 C++ 라이브러리가 제공하는 스마트 포인터와 거의 동일한 것을 제공하고 있습니다. 오늘 이야기해 볼 것이 이 언리얼의 스마트 포인터 입니다. 스마트 포인터의 종류..