2020 이전/C++

스스마트포인터맛 궁금해 허니 궁금해깨물면 메모리 릭이 나는 그맛

이상해C++ 2019. 11. 6. 18:59

제목 곧 내용 스마트 포인터 궁금해 깨물면(서로 참조하면) 메모리 릭이 나는 그 맛

 

스마트 포인터

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 배열을 쓰면 컴파일이 안된다 

 

 

*참고

http://egloos.zum.com/sweeper/v/3059940

'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