#cppcon16 Leak-Freedom in C++ By Default / Herb Sutter
4번을 해결할 수 있는 표준 라이브러리가 없다. 이걸 해결하려고 GC(garbage collection)를 만든다. 순환 참조를 풀려면 결국 이것밖에 없나 싶기도 하고.
hsutter/gcpp - github.com 단순히 컨셉만 설명하는 게 아니라 검증도 해보고 이걸 바탕으로 발표도 하고. 멋지네.
큰 그림을 그리고 빈 곳을 찾아서 이걸 메울 방법을 설명하고 완성하는 건 무척 어려운 일이다. 4번 해결책만 보면 김빠지지만 큰 그림은 다르지. 그래서 난 아주 좋은 발표라고 생각한다. 역시 믿고 보는 Herb Sutter 발표.
다른 발표도 봐야겠네.
raw pointer 대신 소유권(ownership)이 명확한 *_ptr
템플릿 클래스를 사용하자는 내용. 예제로 보여줘서 재미있게 볼 수 있다. 여기까지만 발표하면 herb sutter 형님이 아니다. 뒤에 하나 더 설명한다.
처음 봤다. shared_ptr aliasing constructor. shared_ptr<Node>
레퍼런스 카운트를 사용하는 shared_ptr<Data>
를 만들 때 사용한다.
순환 그래프(cycle graph)는 어떻게 소유권을 관리해야 하나? 순환 참조(reference cycles) 때문에 소유권 정보를 Node에 안 넣고 생명주기(lifetime)를 관리할 수 있는 container를 추가하는 방법으로 해결할 수 있다. Graph 소멸자에서 할당받은 메모리를 릴리즈하기 때문(Region-based memory management)에 메모리 누수(memory leak)은 없다만 Graph 객체가 살아있는 동안에 사용 안 하는 node를 해제하는 건 직접 짜줘야 한다.
이건 현재 있고
짠~ deferred_ptr
.
위 예제를 다시 실험 중인 라이브러리로 바꾸면 이렇게. 퉁쳐서 GC를 구현했다고 생각하면 된다.
FAQ 미리 준비해놓고 관련 질문이 나오니 슬라이드를 띄운다. 훌륭.