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
| void someFunction()
{
std::cout << "Function-In" << std::endl;
std::shared_ptr<Object> objectA = std::make_shared<Object>();
objectA->setID(10);
std::cout << "Reference count : " << objectA.use_count() << std::endl; // 1
// 동일한 객체를 objectB 포인터로 가르킨다.
std::shared_ptr<Object> objectB = objectA;
std::cout << "Reference count : " << objectA.use_count() << std::endl; //2
// objectB로부터 동일한 객체를 가르킬수도 있다.
std::shared_ptr<Object> objectC = objectB;
// objectC도 동일한 객체를 가르키므로, objectA.use_count()와 동일한 결과가 나온다.
std::cout << "Reference count : " << objectC.use_count() << std::endl; // 3
// 첫 번째로 객체를 가르킨 포인터를 해제해도 objectC로 접근이 가능하다.
objectA.reset();
std::cout << "Reference count : " << objectC.use_count() << std::endl; // 2
objectB.reset(); // 1
objectC.reset(); // 0 -> 소멸자 호출
// 여기서 객체의 소멸자가 호출된다.
std::cout << "Function-Out" << std::endl;
}
|