목록공부한거/Cpp (3)
눈팅하는 게임개발자 블로그
스마트 포인터는 포인터를 사용할 때의 메모리 누수 가능성을 아예 차단하기 때문에 정말 좋은 도구이지만 얼마 전에 게임 서버에서는 스마트 포인터가 성능이 안 좋기 때문에 잘 사용하지 않는다라는 이야기를 들었다. 충격적이였다. 스마트 포인터를 배우고 나서는 이게 마치 절대적인 진리인 것마냥 생각했었는데. 이런 건 직접 검증해보는 편이 좋다. 스마트 포인터를 사용한 스택타입 template class StackType { public: StackType(); void Insert(const T& data); T Pop(); T GetTop() const; size_t GetLength() const; private: size_t mLength; std::shared_ptr mTop; }; 처음 템플릿으로 구현..
C++로 코딩을 함에 있어서 RAII를 지킨다함은 크게 2가지를 지키는 것이다. 1. 객체를 생성한 시점에 해당 객체에 필요한 모든 리소스가 초기화 된 상태여야 한다. 2. 객체가 스코프를 벗어나는 시점에 해당 객체가 가진 모든 리소스를 반환해야 한다. class Foo { public: Foo(const std::string& name) : name(name) { namePtr = new std::string(); } ~Foo() = default; Foo(const Foo& rhs) : name(rhs.name) { } Foo& operator=(const Foo& rhs) { name = rhs.name; return *this; } private: std::string name; std::stri..
RVO는 컴파일러에 의해 최적화되는 반환값이다. 다음 코드를 한 줄씩 실행하면서 살펴보자. #include class Foo { public: Foo(const std::string& name) : name(name) { } ~Foo() = default; Foo(const Foo& rhs) : name(rhs.name) { } Foo& operator=(const Foo& rhs) { name = rhs.name; return *this; } private: std::string name; }; Foo NRVOFunc(const std::string& name) { Foo foo(name); return foo; } Foo RVOFunc(const std::string& name) { return Fo..