publicBaseB{};intmain(){std::shared_ptr<Derived>pd(newDerived);std::shared_ptr<BaseB>pb(pd)...
解决std::shared_ptr循环引用问题的钥匙在weak_ptr手上。weak_ptr对象引用资源时不会增加引用计数,但是它能够通过lock()方法来判断它所管理的资源是否被释放。另外很自然地一个问题是:既然weak_ptr不增加资源的引用计数,那么在使用weak_ptr对象的时候,资源被突然释放了怎么办呢?呵呵,答案是你根本不能直接通过weak_p...
这个实现使用了中的hash table容器(std::unorderer_map),尽管没有显示出WidgetID的hash计算和比较相等的函数。 fastLoadWidget 的实现忽略了缓存中的过期的std::weak_ptr会不断积累,因为相关联的Widget可能不再使用(因此会被销毁)。这个实现可以被改善,而不是花时间去深入到std::weak_ptr中去观察...
这个实现使用了c++ 11的哈希表容器之一(std::unor dered_map),但是没有展示Widget ID哈希和相等比较函数。 fastLoadWidget的实现忽略了一个事实:缓存还是会累积过期std::weak_ptr。这里是可以进行重构的,但是与其将时间花在不能进一步深入了解std::weak_ptr的问题上,不如考虑第二个用例:观察者设计模式。这种模式...
C++11利用了hash表容器(std::unordered_map),尽管它没有提供所需的WidgetID哈希算法以及相等比较函数。 我为啥要说fastLoadWidget实现欠缺完美,因为它忽略了一个事实,缓存可能把一些已经过期的std::weak_ptr(对应的Widget不会被使用了,已经被销毁了)。所以它的实现还可以再改善下,但是我们还是不要深究了,因为深究对...