스마트 포인터

· Game/Unreal
언리얼 스마트 포인터 스마트 포인터는 원시 포인터를 안전하고 효율적으로 사용하기 위해 만들어진 개념이다. 원시 포인터란 *를 통해 표현하는 것을 말한다. 이를 사용하면 댕글링 포인터나 이중 해제 등 문제가 발생할 수 있다. 예를 들어, 여러 곳에서 하나의 객체를 가리키고 있었다고 가정해 보자. 중간에 이 객체가 쓰임을 다해 소멸을 시켰다고 한다면 이를 가리키고 있는 모든 포인터가 유효하지 않는 값을 가리키고 있게 되는 것이다. 만약 이를 인지하지 못하고 사용한다면 엉뚱한 주소의 값을 변경하거나 런타임 에러가 발생할 수 있다. 이를 방지하기 위해 만들어진게 스마트 포인터이다. 스마트 포인터 타입 언리얼에서는 C++의 스마트 포인터를 사용하여 새로운 스마트 포인터를 만들어 제공한다. Shared Pointe..
new로 생성한 객체를 스마트 포인터에 넣는 코드는 한 문장으로 만들어라. 그렇지 않으면, 예외가 발생될 때 자원 누출 가능성이 생긴다. 새로 생성한 객체를 스마트 포인터로 관리할 때 주의점 자원 누출을 막기 위해 스마트 포인터를 사용하는 것은 좋은 방법이다. 하지만, 이 방법을 사용하더라도 자원 누출이 발생할 수 있다. int priority(); // 우선순위를 알려주는 함수 void processWidget(std::tr1::shread_ptr pw, int priority); // 우선순위에 따라 처리 우선순위에 따라 어떠한 작업을 하는 함수가 있다고 가정하자. processWidget(new Widget, priority()); 이렇게 함수를 사용할 수 없다. tr1::shared_ptr의 생성..
자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII 객체를 사용하자. 일반적으로 쓰이는 RAII 클래스는 tr1::shared_ptr, auto_ptr이다. tr1::shared_ptr이 복사 시의 동작이 직관적이기 때문에 더 좋다. auto_ptr은 원본 객체를 null로 만든다. 자원 관리 객체 자원이란, 사용을 일단 마치고 난 후엔 시스템에 돌려주어야 하는 모든 것을 일컫는다. 특히 동적 할당된 메모리가 있고 파일 서술자, 뮤텍스 잠금, GUI, 폰트, 브러시 등이 있다. 이러한 자원들을 관리하는데 효과적인 방법 중 하나는 자원 관리 객체를 사용하는 것이다. 투자를 모델링해 주는 클래스 라이브러리를 가지고 작업을 한다고 가정하자. 이 라이브러리는 Investm..
hvv_an
'스마트 포인터' 태그의 글 목록