본문 바로가기

컴퓨터/Modern Effective C++ 정리16

Modern Effective C++ item 19 : 공유자원은 std::shared_ptr 공유하는 자원을 사용할 때 std::shared_ptrstd::unique_ptr은 사용권을 양도하는 식으로 자원을 관리했다. 하지만 실제로 우리가 할당된 자원(포인터)을 사용할 때 unique한 방식보다는 여러 곳에서 그 자원을 공유하는 방식으로 사용하게 된다. 하지만 처음 할당한 자원을 여기저기에서 참조하고 있으면 dangling 포인터와 같은 자원관리 문제가 발생하기 쉽다. Java에는 Garbage Collection이라는 자동 자원관리 방식을 지원해서 공유된 자원에 유저가 신경쓸 필요없이 편하게 프로그래밍이 가능하다. 대신 유저가 자원이 해제되는 시점에 대해서 알기 어렵다는 단점이 있다. C++ 11부터는 shared_ptr을 사용하여 두가지 목표(자동 자원관리, 예측 가능한 해제시점)를 모두 .. 2015. 4. 14.
Modern Effective C++ Item 17 : 자동 생성 함수 in C++11 특수 멤버함수 자동 생성 in C++11특수 멤버함수 자동 생성 in C++ 98이펙티브 C++에서 말한 것처럼, 컴파일러가 프로그래머 몰래 만드는 함수들이 있다. 클래스에게 기본적인( 생성자, 소멸자, 복사생성자, 복사 대입 연산자 )함수들이 필요할 때, 사용자가 해당 함수를 정의하지 않았다면 컴파일러가 유저의 편의를 위해 자동으로 만들어 준다. 이 말인 즉, 정의한다면 자동 생성함수가 만들어지지 않는다는 뜻이다.이런 자동 생성 멤버함수들을 Scott Meyers는 특수 멤버함수(Special Member Function)라고 말한다. 이런 특수멤버함수들이 자동으로 생성되면 public, inline형태로 선언되고, 각 비정적 멤버 변수의 해당 함수(생성자, 소멸자, 복사 생성자, 복사 대입 연산자)를.. 2015. 4. 8.
Modern Effective C++ Item 12: 오버라이딩 함수에 override를 선언하자. Item 12: 오버라이딩 함수에 override를 선언하자.다형성의 핵심적인 기능중 하나는 부모클래스의 동작을 자식클래스가 오버라이딩 할 수 있다는 것이다.class Base{ public: virtual void doWork(); //virtual로 선언한뒤... ... }; class Derived: public Base{ public: virtual void doWork(); //오버라이딩! ... }; std::unique_ptr upd = std::make_unique(); //unique_ptr에서 정적 포인터는 Base, //동적 포인터는 Derived로 만드는 방법 upd->doWork(); //동적 바인딩을 통해 Derived 객체의 doWork가 실행된다.실수하기 쉬운 오버라이딩 규칙.. 2015. 3. 24.
Modern Effective C++ Item 11 : Private 봉인술 <<< Delete 봉인술 Item 11 : Private 봉인술 2015. 3. 24.