weak_ptr 的使用方法及意义

//weak_ptr的用处
//创建时使用 shared_ptr
//使用是使用 weak_ptr
//防止互相应用导致析构失败
#include
#include
#include
using namespace std;
#include
#include
using namespace boost;
class B;
class A
{
  //shared_ptr m_value;//析构函数将不能正常析构
  weak_ptr m_value;    //析构函数将能正常析构
public:
  string str;
  A(){str = "A";cout<<"A 构造"<  void SetValue(shared_ptr p){m_value = p;}
  weak_ptr GetData(){return m_value;}
  ~A(){cout<<"A 析构"<};
class B
{
  //shared_ptr m_value;//析构函数将不能正常析构
  weak_ptr
m_value;    //析构函数将能正常析构
public:
  string str;
  B(){str = "A";cout<<"B 构造"<  void SetValue(shared_ptr
p){m_value = p;}
  weak_ptr
GetData(){return m_value;}
  ~B(){cout<<"B 析构"<};
void Do()
{
    cout<<"-----------------------------"<    shared_ptr
a(new A);
    shared_ptr b(new B);
    a->SetValue(b);
    b->SetValue(a);
    weak_ptr bb = a->GetData();
    if(bb.expired())
    {
      cout<str<    }
    cout<<"-----------------------------"<}
int main(int argc, char *argv[])
{
    Do();
    system("PAUSE");
    return EXIT_SUCCESS;
}

你可能感兴趣的:(C++,Boost,《超越STL》代码)