#include
#include
using namespace std;
class Child;
class Parent;
class Parent
{
private:
//std::shared_ptr ChildPtr;
std::weak_ptr ChildPtr;
public:
void setChild(std::shared_ptr child)
{
this->ChildPtr = child;
}
~Parent()
{
}
};
class Child
{
private:
//std::shared_ptr ParentPtr;
std::weak_ptr ParentPtr;
public:
void setParent(std::shared_ptr parent)
{
this->ParentPtr = parent;
}
~Child()
{
}
};
int main()
{
std::weak_ptr wpp;
std::weak_ptr wpc;
{
std::shared_ptr p(new Parent);
std::shared_ptr c(new Child);
p->setChild©;
c->setParent§;//,上面的C同理,这是一个拷贝的操作,这里p的引用计数会加1,变为2了。
wpp = p;
wpc = c;
cout << p.use_count() << endl;
cout << c.use_count() << endl;
}//离开作用域后,p,c自己都释放了,但是p->c的c和c->p的p还没释放,导致了内存泄漏。使用weak_ptr可以不增加计数,从而可以完成赋值和解决内存泄漏的问题。
cout << wpp.use_count() << endl;
cout << wpc.use_count() << endl;
system(“pause”);
return 0;
}