弱指针boost::weak_ptr的定义在boost/weak_ptr.hpp里。到目前为止介绍的各种智能指针都能在不同的场合下独立使用。相反,弱指针只有在配合共享指针一起使用时才有意义。因此弱指针被看作是共享指针的观察者,用来观察共享指针的使用情况。当用到共享指针时,就要考虑是否需要使用弱指针了,这样可以解除一些环形依赖问题。
1 #include <iostream> 2 #include <windows.h> 3 #include <boost/weak_ptr.hpp> 4 5 DWORD WINAPI reset(LPVOID p)//typedef unsigned long DWORD; 6 { 7 boost::shared_ptr<int>*sh = static_cast<boost::shared_ptr<int>*>(p); 8 sh->reset();//指针重置 9 return 0; 10 } 11 12 DWORD WINAPI print(LPVOID p)//typedef unsigned long DWORD; 13 { 14 boost::weak_ptr<int>*pw = static_cast<boost::weak_ptr<int>*>(p); 15 boost::shared_ptr<int>sh = pw->lock();//锁定不可以释放 16 if (sh) 17 { 18 std::cout << *sh << std::endl; 19 } 20 else 21 { 22 std::cout << "指针已经被释放" << std::endl; 23 } 24 return 0; 25 } 26 27 void main() 28 { 29 boost::shared_ptr<int>sh(new int(99)); 30 boost::weak_ptr<int>pw(sh); 31 32 HANDLE threads[2]; 33 34 threads[1] = CreateThread(0, 0, print, &pw, 0, 0);//创建一个线程 35 36 Sleep(1000); 37 38 threads[0] = CreateThread(0, 0, reset, &sh, 0, 0);//创建一个线程 39 40 WaitForMultipleObjects(2, threads, TRUE, INFINITE);//等待线程结束 41 }
时间: 2024-10-04 08:01:27