참조 카운트란 무엇인가

내 포인터를 얻어갈 때 마다 카운트를 1 증가 시키고

얻어간 포인터를 해제할때 카운트를 확인하고 0이라면 삭제하고 0이 아니라면 카운트를 1 감소 시키기만 한다.


객체의 포인터를 관리하면 스마트 포인터 만들 수 있다.

이녀석을 상속 받아서 클래스를 만들고 포인터를 저장해야 할때 저장하고 AddRef를 호출해 증가시키며 관리한다.

빌려간 포인터를 다쓰면 Release를 호출해주면 된다.


일일이 AddRef를 하는 건 뭔가 번거로운 거 같아서...

operator= 를 이용해 AddRef를 호출해주려고 해봤는데 잘 안됨....ㅠ

pObj2 = pObj를 애초에 생각을 잘 못 한거 같다. 

결국, AddRef를 호출하면서 씀...ㅠㅠ


만들어 보면서 포인터에 대해서 다시 생각해보게 되었다.

포인터에 operator=가 있을 리가 없지... 결국, 포인터가 내가 만든 연산자를 수행하는 건 말이 안 됐음.


그래서 다시 생각해서 만들어봤다.

원본객체에 operator= 포인터를 넣어주면 AddRef를 호출하고 원본객체의 주소를 받아오는 식으로 해봤다.


결국 만들긴 했지만 내가 원했던 그림이 아니다.

pObj2 = pObj;를 원했는데.....윽

참고로 pObj = pObj2; 이렇게 쓰면 안 됨, 포인터 = 포인터로 됨.


느낀점: 포인터에 대해서 잘 못 알고 있었단 걸 알게 됐다.

끝.

반응형