include <memory.h> 헤더파일을 포함시켜야함

유니크포인터.

unique_ptr -->이 포인터가 한 인스턴스를 가지면 다른 포인터가 얘를 가리키려고할때 컴파일에러로 막는다.

또 유니크포인터가 스코프를 탈출할때 소멸자단에서 메모리를 해제해준다.

순수c++11 --> std::unique_ptr<타입> 이름(new 타입(매개변수))

c++14--> std::unique_ptr<타입> = make_unique<타입>(매개변수)

 

언리얼c++ -->TUniquePtr

https://api.unrealengine.com/INT/API/Runtime/Core/Templates/TUniquePtr/index.html

 

 

공유포인터.

c++14이후 나왔다.

유니크 포인터와 달리 얘는 여러포인터가 나를 참조할수있다.

다만 내가 가지고있는 데이터와

내가 몇개의 포인터한테 공유되고있는지 카운팅한다.

강한참조횟수와 약한참조횟수를 카운팅함. 이외에 잡다한기능 몇개 있음.

 

 

Uobject가 이에 해당된다.

참조횟수가 카운팅되고 GC가 메모리를 회수해간다.

Newobject< >로 메모리할당이 된경우

Uobject::ConditionalBeginDestroy() 멤버함수로 수동 메모리해제도 가능하다.

이 이하는

이미 c++절에서 설명했고

언리얼 레퍼런스보다 더 정리를 잘할수 없어서 그냥 링크남기고 ㅌㅌ 하겠따.

주의사항 짧게하자면 공유포인터는 선언할때 초기화 안하면 안되고

isvalid로 유효성 검사를 할수있다.

공유레퍼런스는 널포인터를 가리키는게 안되서 안전하니까.

왠만하면 공유 레퍼런스 쓰란다.

http://api.unrealengine.com/KOR/Programming/UnrealArchitecture/SmartPointerLibrary/SharedPointer/

 

약한포인터.

공유포인터가 지들끼리 강한참조로 서로 공유하고있으면 서로 참조할 경우.

가비지컬렉터가 돌때 참조횟수를 기준으로 검열을하는데

이때 서로 공유하고있는 애들끼리 무한으로 참조하고 앉아있으면 가비지컬렉터는 얘는 쓰레기가 아닌줄알고

메모리에 계속 냅둔다 이것의 순환참조의 문제다. .

그래서 약한 포인터가 나왔다.

무조건 공유포인터 하나를 주인으로 참조하고있어야 하는데.

약한포인터는 공유포인터가 없어지면 주인따라서 같이 죽어버린다. 때문에 메모리에 남는일이 없다.

그치만 , 그 이유때문에 약한포인터는 참조한다고했을때 언제 없어질지몰라서 위험하다.

떄문에 lock으로 잠가서 넘겨주는것이 있다.

아래코드는 예들들어 설명.

 

http://api.unrealengine.com/KOR/Programming/UnrealArchitecture/SmartPointerLibrary/WeakPointer/index.html

+ Recent posts