简介:【C/C++ 解惑 】std::weak_ptr 背后解决的问题 std::weak_ptr是 C++11标准库中引入的一种智能指针,用于解决与std::shared_ptr相关的循环引用问题。 当你使用std::shared_ptr来管理对象的生命周期时,两个或多个std::shared_ptr对象可能会形成一个循环引用,即它们互相持有对方的引用。这会导致引用计数永远不会
在这种情况下,这将消除对弱引用的需求。弱引用需要一个单独的对象进行计数,这有一些性能和空间方面的缺点(尽管afaik多数民众赞成shared_ptr显然总是在C ++中起作用,所以别无选择)。 @ShelbyMooreIII如果编写没有弱ptr的引用计数的智能ptr,则需要一个单独的对象来存储计数,除非该计数与托管对象一起分配。 等一下,...
在考虑持有三个对象A、B、C的数据结构时,其中A和C共享B的所有权,并且从B指向A的指针也很有用的情况下,我们有三种选择来实现这个指针:原始指针、std::shared_ptr 和 std::weak_ptr。 原始指针: 优点:简单直接。 缺点:如果A被销毁而C继续存在,B中的指向A的指针会变成悬空指针。这可能导致未定义行为,因为B不...
而不是用于C/C++类型的指针EN设计std::weak_ptr指的是一个可能存在也可能不存在的对象。它不提供opera...
一个原始指针。用这种方法,如果A销毁了,但是C仍然指向B,B将持有指向A的悬挂指针。B不会发现,所以B可能无意识地解引用这个悬挂指针。这将产生未定义的行为。 一个std::shared_ptr。在这种设计下,A和B互相持有指向对方的std::shared_ptr。这产生了std::shared_ptr的循环引用(A指向B,B指向A),这会阻止A和B被...
std::bad_weak_ptr是C++标准库中的一个异常类型,它属于智能指针异常的一种。当尝试对一个已经过期的std::weak_ptr执行解锁(lock)操作,而该weak_ptr所管理的对象已经被销毁时,就会抛出std::bad_weak_ptr异常。这表示weak_ptr不再指向一个有效的对象。