这个真正的智能的指针要可以跟踪何时指向的对象不再存在,也就是这个指针何时变为了悬挂指针,来避免重复释放资源的情况,这种智能指针就是std::weak_ptr。 你可能想知道std::weak_ptr是为什么很有用。当你研究std::weak_ptr API时,你可能会发现它一点也不智能。std::weak_ptrs不能解引用,也不能判断是否为空指针。
(2)用已有的 weak_ptr 指针创建一个新的 weak_ptr 指针:weak_ptr<int>wp2(wp1); 若wp1 为空指针,则 wp2 也为空指针;反之,如果 wp1 指向某一 shared_ptr 指针拥有的堆内存,则 wp2 也指向该块存储空间(可以访问,但无所有权)。 (3)weak_ptr 指针更常用于指向某一 shared_ptr 指针拥有的堆内存,因为...
指针指向的对象内存,却并不拥有该内存。使用weak_ptr成员函数lock,则可返回其指向内存的一个shared_ptr对象,且在所指对象内存已经无效时,返回空指针。 为什么会引入weak_ptr呢?它是为了解决shared_ptr循环依赖导致的内存问题而引入的。让我们考虑一个场景,有两个类A和B,都包含指向对方类的shared_ptr指针,这样A指向...
一个合理的设计就是让每个主题只有一个容器来放置指涉到其观察者的std::weak_ptr,以便主题在使用某个指针之前,能够先确定它是否空悬。 3.用来打破std::shared_ptr引起的环路