제목 곧 내용 스마트 포인터 궁금해 깨물면(서로 참조하면) 메모리 릭이 나는 그 맛
스마트 포인터
C++에서 메모리에 대한 참조와 소유권을 관리하는 특별한 클래스.
메모리에 대한 참조와 소유권을 단 하나만 허락하는 unique_ptr, 메모리에 대한 참조와 소유권을 레퍼런스 카운트로 관리하는 shared_ptr, 메모리에 대한 참조를 허락하지만 소유는 하지않는(레퍼런스 카운트를 올리지 않는) weak_ptr이 있다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
#include <crtdbg.h>
using namespace std;
class circular
{
public:
circular() { cout << "circular생성자" << endl; }
~circular() { cout << "circular파괴자" << endl; }
public:
shared_ptr<circular> m_other = nullptr;
};
int main()
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
// circular
{
shared_ptr<circular> mine = make_shared<circular>();
shared_ptr<circular> others = make_shared<circular>();
mine->m_other = others;
others->m_other = mine;
cout << "mine : " << mine.use_count() << endl;
cout << "others : " << others.use_count() << endl;
}
return 0;
}
|
cs |
스마트 포인터 궁금해 깨물면(서로 참조하면) 메모리 릭이 나는 그 맛
weak_ptr
로 해결한다.
weak_ptr로 자신이 참조하고 있는 shared_ptr이 유효한지 아닌지 검사할 수 있다.
C스타일 배열
shared_ptr에 C style 배열을 쓰면 컴파일이 안된다
*참고
'2020 이전 > C++' 카테고리의 다른 글
커스텀 할당자 만들기 (0) | 2020.02.02 |
---|---|
vector 키우기 (0) | 2020.01.29 |
STL std::map/std::unordered_map의 세상 (0) | 2019.10.24 |
태정태세CriticalSection Mutex Semaphore DeadLock (0) | 2019.10.17 |
서버 공부 자료 링크 (0) | 2019.10.14 |