Open ggjae opened 3 years ago
#include <memory> 헤더로 사용 가능하다.
#include <memory>
C++ 프로그램에서 new 키워드를 사용하면, delete로 해제할 수 있다.
C++은 메모리 릭으로부터 안전하기 위해 스마트 포인터를 사용할 수 있는데, 포인터처럼 동작하는 클래스로 사용이 끝난 메모리를 자동으로 해제해주는 기능
하나의 스마트 포인터만이 특정 객체를 소유할 수 있도록 객체에 소유권 개념을 도입 소유권을 이전할 수 있지만, 스마트포인터가 객체의 소유권을 가지고 있을 때만 소멸자가 해당 객체를 삭제할 수 있게 함
하나의 특정 객체를 참조하는 스마트 포인터가 총 몇개인지 확인하여 shared_ptr의 수명이 다하고, 참조 횟수가 0이 되면 delete 키워드를 이용하여 해제된다. 스마트 포인터의 개수를 참조 횟수(ref count)라고 함.
shared_ptr 인스턴스가 소유하는 객체에 대한 접근을 제공하지만, 소유자의 수는 포함되지 않는 스마트 포인터로, shared_ptr에서 순환 참조가 일어나는것을 제거하기 위해 사용한다.
new 키워드를 사용해 일반 포인터가 메모리를 가리키도록 초기화하고, 기본 포인터를 스마트포인터에 대입하여 사용한다. 이렇게 정의된 스마트 포인터가 수명이 다하면 소멸자를 통하여 자동으로 메모리 해제가 진행된다.
가비지 컬렉터의 경우, 메모리를 할당한 변수들을 전부 돌면서 확인하는 과정을 거치지만 C++의 스마트포인터의 경우 내가 지정한 변수들에 대해서만 검사를 진행할 수 있다는 큰 강점을 가지고 있다고 생각해.
언리얼 오브젝트에는 스마트포인터를 사용하진 못한다. 언리얼오브젝트는 가비지컬렉터에 의해 자동으로 메모리가 관리되기 떄문에...
스마트 포인터란?
#include <memory>
헤더로 사용 가능하다.C++ 프로그램에서 new 키워드를 사용하면, delete로 해제할 수 있다.
C++은 메모리 릭으로부터 안전하기 위해 스마트 포인터를 사용할 수 있는데, 포인터처럼 동작하는 클래스로 사용이 끝난 메모리를 자동으로 해제해주는 기능
unique_ptr
하나의 스마트 포인터만이 특정 객체를 소유할 수 있도록 객체에 소유권 개념을 도입 소유권을 이전할 수 있지만, 스마트포인터가 객체의 소유권을 가지고 있을 때만 소멸자가 해당 객체를 삭제할 수 있게 함
shared_ptr
하나의 특정 객체를 참조하는 스마트 포인터가 총 몇개인지 확인하여 shared_ptr의 수명이 다하고, 참조 횟수가 0이 되면 delete 키워드를 이용하여 해제된다. 스마트 포인터의 개수를 참조 횟수(ref count)라고 함.
weak_ptr
shared_ptr 인스턴스가 소유하는 객체에 대한 접근을 제공하지만, 소유자의 수는 포함되지 않는 스마트 포인터로, shared_ptr에서 순환 참조가 일어나는것을 제거하기 위해 사용한다.
사용 방법
new 키워드를 사용해 일반 포인터가 메모리를 가리키도록 초기화하고, 기본 포인터를 스마트포인터에 대입하여 사용한다. 이렇게 정의된 스마트 포인터가 수명이 다하면 소멸자를 통하여 자동으로 메모리 해제가 진행된다.
1. 가비지 컬렉터와 다른 점이 뭐지?
가비지 컬렉터의 경우, 메모리를 할당한 변수들을 전부 돌면서 확인하는 과정을 거치지만 C++의 스마트포인터의 경우 내가 지정한 변수들에 대해서만 검사를 진행할 수 있다는 큰 강점을 가지고 있다고 생각해.
언리얼 오브젝트에는 스마트포인터를 사용하진 못한다. 언리얼오브젝트는 가비지컬렉터에 의해 자동으로 메모리가 관리되기 떄문에...