반응형
General Utilities
Reference Wrapper (tr1::reference_wrapper)
쉽게 말하여 함수포인터에 레퍼런스를 적용시키기 위해서 존재하는 듯 합니다. Wikipedia에서 발취한 예제는 아래와 같습니다.
#include <iostream>
#include <functional>
void f( int &r ) { ++r; }
template< class Funct, class Arg >
void g( Funct f, Arg t )
{
f(t);
}
int main()
{
int i = 0;
g( f, i ); // 'g< void(int &r), int >' is instantiated
std::cout << i << "\n"; // Output: 0
g( f, std::tr1::ref(i) ); // 'g< void(int &r), reference_wrapper<int> >' is instanced
std::cout << i << "\n"; // Output: 1
}
Smart Pointers
shared_ptr
쉽게 말하여 reference counting을 하면서 resource를 관리하는 포인터입니다. shared_ptr에 의하여 지칭하는 객체를 shared_ptr사이에서 서로 공유합니다.
bool TTR1_SharedPtr01::Test()
{
tr1::shared_ptr<ttest090722> test(new TTest090722());
test->i=7;
{
//test2와 test은 객체를 공유함
tr1::shared_ptr<ttest090722> test2(test);
cout << "i: " << test2->i << " / ";
cout << "Ref Count:" << test.use_count() << endl; //Ref Count: 2
}
//객체를 공유하던 test2가 소멸됨
cout << "Ref Count:" << test.use_count() << endl; //Ref Count: 1
return true;
}
weak_ptr
shared_ptr의 순환 참조의 문제를 해결하기 위하여 쓰는데 shared_ptr이 공유하는 객체를 weak_ptr도 공유하게 되는데 shared_ptr이 공유할 경우 reference counting이 변하는데 반하여 weak_ptr은 reference counting에 영향을 주지 않습니다. 그래서 쓸 떄도 직접 공유객체를 포인팅해서 쓸 수 없고 shared_ptr을 lock()함수를 이용하여 호출한 뒤에 쓸 수 있습니다.
bool TTR1_WeakPtr01::Test()
{
tr1::shared_ptr<ttest090722> test(new TTest090722());
test->i=7;
{
//test2와 test은 객체를 공유하지는 않지만 test2는 test 객체를 포인팅
tr1::weak_ptr<ttest090722> test2(test);
//test2.lock()을 하여 shared_ptr을 호출하여 test 객체를 호출함
cout << "i: " << test2.lock()->i << " / ";
//weak_ptr은 reference counting에 관여하지 않음
cout << "Ref Count:" << test.use_count() << endl; //Ref Count: 1
}
cout << "Ref Count:" << test.use_count() << endl; //Ref Count: 1
return true;
}
참조사이트
Wikipedia C++ Technical Report 1 jacking님의 노트 '01. Boost C++0x TR1 - Install, array, shared_ptr, weak_ptr
반응형
'C++ 프로그래밍' 카테고리의 다른 글
C++ Technical Report 1 : Random Number Generation (0) | 2009.07.30 |
---|---|
C++ Technical Report 1 : Metaprogramming and Type Traits (0) | 2009.07.29 |
C++ Technical Report 1 : Function pobjects (0) | 2009.07.28 |
C++ Technical Report 1 : Containers (0) | 2009.07.27 |
C++ Technical Report 1 (TR1) : Overview (0) | 2009.07.23 |
Visual Studio 2010에 적용 예정인 C++0x (0) | 2009.07.21 |
C++ 헤더파일에 선언할 수 있는 4가지 타입의 전역변수 (0) | 2009.04.21 |
[STL] erase Story... beta (1) | 2009.04.21 |