언어

[Effective C++] #17 자원 관리 객체와 new 사용 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 17 "new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자"에 해당하는 내용입니다. 자원 관리 객체의 메모리 동적 할당 void someFunc (std::tr1::shared_ptr, int priority){ ... }; int priority = 1; someFunc(std::tr1::shared_ptr(new A_클래스), priority); 위 예제 코드는 동적으로 할당받은 A_클래스 객체에 대한 자원 관리 객체(shared_ptr)와 정..
[Effective C++] #16 new 및 delete 사용 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 16 "new 및 delete를 사용할 때는 형태를 반드시 맞추자"에 해당하는 내용입니다. 동적 할당 코드 작성 중 일시적으로 필요한 만큼의 자원을 할당받고 불필요한 자원 낭비를 방지하는 메모리 할당 방법입니다. 우리가 작성한 program이 정상적으로 실행되기 위해 메모리 공간이 필요합니다. 이때, 프로세스의 runtime 중 필요한 메모리 크기만큼을 컴퓨터에 일려 줌으로써 자원을 보다 효율적으로 사용할 수 있도록 해줍니다. 동적 할당은 heap 영역에서 이루어지고, new를 ..
[Effective C++] #15 자원 관리 객체, 자원에 대한 접근 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 15 "자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자"에 해당하는 내용입니다. 자원 관리 객체, 그리고 자원에 대한 접근 자원 관리 객체는 외부(API)에서 해당 자원을 접근할 수 있도록 허용해야 합니다. 물론, 외부의 접근을 허용하는 행동은 캡슐화에 위배되는 행동입니다. 하지만, 자원 관리 객체의 목적은 자원을 외부로부터 숨기기 위함이 아니라, 성공적으로 자원 해제를 수행하기 위 위함입니다. 자원 관리 객체의 자원들에 접근하는 방법은 두 가지가 있..
[Effective C++] #14 자원 관리 객체 심화 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 14 "자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자"에 해당하는 내용입니다. 자원 관리 객체의 복사 class Lock { public: Lock (Mutex* pm) : mutexPtr(pm) {lock(mutexPtr);} ~Lock(){unlock(mutexPtr);} private: Mutex* mutexPtr; } #include using namespace std; int main() { Mutex m; Lock m1(&m); ...// m1 객체의 소멸자 호출 및..
[Effective C++] #13 자원 관리 객체, std::auto_ptr, std::shared_ptr Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 3장 "자원 관리", 항목 13 "자원 관리에는 객체가 그만"에 해당하는 내용입니다. std::auto_ptr A_클래스* createAClass(); // A클래스 객체를 가리키는 포인터를 반환, 팩토리 함수. void f() { A_클래스* pA = createAClass();// 팩토리 함수 호출 ... delete pA;// pA 객체의 자원을 해제합니다. } *******************std::auto_ptr을 적용*****************..
[Effective C++] #11 중복 참조와 자기 대입 연산자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 11 "operator=에서는 자기 대입에 대한 처리가 빠지지 않도록 하자"에 해당하는 내용입니다. 중복 참조에 의한 자기 대입 연산 class Wclass {...}; Wclass w; ... w = w; *px = *py;// 서로 같은 객체를 가리킬 수도 ... a[i] = a[j]; // 같은 값일 수도... 보통 자기 대입 연산은 적법한 코드로 분류됩니다. 쉽게 말해, 사용자 쪽에서 문제가 발생한지 모를 수 있죠. 위 예제 코드는 일단 보기에 크게..
[Effective C++] #10 대입 연산자와 *this의 참조자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 10 "대입 연산자는 *this의 참조자를 반환하게 하자"에 해당하는 내용입니다. 대입 연산자 대입연산자 = { =, *=, /=, %=, +=, -=, =, &=, ^=, |= } class A { public: ... A& operator=(const A& 우변객체){ ... return *this; } }; 대입 연산자는 위 코드에서 살펴본 대로, "= *= /= %= += -= = &= ^= |="를 의미합니다. "="의 경우 단순 할당 연산자로..
[Effective C++] #9 가상 함수를 호출하는 생성자, 소멸자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 9 "객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자"에 해당하는 내용입니다. 생성자 내부의 가상 함수 class 기본클래스 { public: 기본클래스 (); virtual void 가상함수 () const = 0; ... }; 기본클래스::기본클래스 () { 가상함수 (); } class 파생클래스: public 기본클래스 { public: virtual void 가상함수 () const; ... }; // 파생클래스 객체 생성 ..
[Effective C++] #8 소멸자가 던지는 예외 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 8 "예외가 소멸자를 떠나지 못하도록 붙들어 놓자"에 해당하는 내용입니다. 예외를 던지는 소멸자 class DB연결 { public: ... static DB연결 create();// DBConnection 객체 반환 함수 void close();// DB연결을 끊는 함수 }; class DB연결_관리 { publlic: ... ~DB연결_관리(){//소멸자 안에서 호출하는 close 함수 db.close();// 또는 소멸자 안에서 예외를 던지는 함수 } priva..
[Effective C++] #7 기본 클래스와 가상 소멸자 Scott Meyers의 "Effective C++"를 통해, C++ 구현에 필요한 개념들을 이해하고, 기록하기 위함입니다. 해당 항목은 2장 "생성자, 소멸자 및 대입 연산자", 항목 7 "다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자"에 해당하는 내용입니다. 가상 소멸자 virtual ~Class_Name( ) {...} "소멸자"란 객체의 소멸 시점에 자원을 정상적으로 해제하기 위해 호출하는 함수입니다. 이 소멸자를 "virtual" 키워드와 함께 사용하는 것을 "가상 소멸자"라고 합니다. "가상 소멸자"는 호출될 때, 다형성을 지원하는 기본 클래스를 상속받는 자식 클래스의 소멸자를 호출 한 뒤에 부모 클래스의 소..
Hardii2
'언어' 카테고리의 글 목록 (15 Page)