본문 바로가기

전체 글86

Pimpl 관용구를 사용할 때에는 특수 멤버 함수들을 구현 파일에서 정리하라 Pimpl 관용구는 클래스의 자료 멤버들을 구현 클래스 또는 구조체를 가리키는 포인터로 대체하고, 일차 클래스에 쓰이는 자료 멤버들을 그 구현 클래스로 옮기고, 포인터를 통해 그 자료 멤버들에 간접적으로 접근하는 방법이다. 일반적으로 헤더의 의존도를 떨어뜨리고, 컴파일 시간을 단축해 준다. 기존 C++98에서의 구현 방법 예시이다. // "widget.h" class Widget { public: Widget(); ... private: std::string name; std::vector data;// 헤더 내에 #include , #include 필요 Gadget g1, g2, g3; }; // Pimpl 관용구 적용 class Widget { public: Widget(); ~Widget();// .. 2020. 7. 16.
알고리즘 스터디 https://programmers.co.kr/learn/courses/30/lessons/49993#fnref1 코딩테스트 연습 - 스킬트리 programmers.co.kr 문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과.. 2020. 7. 15.
new 보다 std::make_shared와 make_unique를 선호하라 std::make_shared는 C++11의 일부지만 std::make_unique는 C++14에 와서 표준 라이브러리에 포함되었다. 하지만 간단하게 구현할 수 있다. template// C++11 용으로 구현한 make_unique std::unique_ptr make_unique(Ts&&... params) { return std::unique_ptr(new T(std::forward(params)...)); } new 보다 make 함수를 선호해야하는 첫번째 이유로는 코드의 중복을 없애는데 있다. auto upw1(std::make_unique());// make 함수를 사용 std::unique_ptr upw2(new Widget);// 사용하지 않음 되풀이되는 Widget의 중복을 없앨 수 있다.. 2020. 7. 15.
std::weak_ptr std::weak_ptr은 std::shared_ptr에서의 문제점인 자신이 가리키는 대상이 이미 파괴되었을 수 있다는 문제를 극복 할 수 있다. std::weak_ptr는 역참조 할 수 없으며, 널인지 판정할 수도 없다. std::weak_ptr는 그 자체로 smart pointer가 아닌 std::shared_ptr를 보강하는 위치에 있기 때문이다. 대체로 std::weak_ptr는 std::shared_ptr를 이용해 생성한다. std::weak_ptr는 자신을 생성하는데 쓰인 std::shared_ptr가 가리키는 것과 동일한 객체를 가리키지만 그 객체의 참조 횟수에는 영향을 주지 않는다. 대상을 잃은 std::weak_ptr를 만료 되었다고 하며, expire를 호출함으로써 알 수 있게 된다. .. 2020. 7. 14.
알고리즘 스터디 Google KickStart 2020 Round A Plates 총 N개의 Plates 스텍이 있고, 각각 K 개의 plates가 있다. P개의 Plates를 선택했을때 최댓값을 구하는 문제이다. Limits Time limit: 20 seconds per test set. Memory limit: 1GB. 1 ≤ T ≤ 100. 1 ≤ K ≤ 30. 1 ≤ P ≤ N * K. The beauty values are between 1 and 100, inclusive. C++를 사용한 제 풀이입니다. #include #include #include #include using namespace std; int n, k, p; void solve() { cin >> n >> k >> p; vector a(.. 2020. 7. 13.
소유권 공유 자원의 관리에는 std::shared_ptr를 사용하라 공유 포인터 즉 std::shared_ptr를 통해서 접근되는 객체의 수명은 공유포인터가 shared ownership 의미론을 통해서 관리한다. 특정한 하나의 std::shared_ptr이 객체를 소유하는 것이 아니다. 그 대신 모든 std::shared_ptr는 객체가 더 이상 필요하지 않게 된 시점에서 객체가 파괴됨을 보장하려 한다. 객체가 가리키던 마지막 std::shared_ptr가 객체를 더 이상 가리키지 않게 되면 자신이 가리키는 객체를 파괴한다. 이를 위해 std::shared_ptr는 자원에 연관된 값을 참조 횟수로서 제어블록에 담아 관리한다. 보통 생성시 참조 횟수를 증가시키며, 소멸자는 감소시킨다. 복사 배정 연산자는 둘 모두 수행한다. 이동 생성의 경우 기존 std::shared_p.. 2020. 7. 13.