草庐IT

weak_intrusive_pointer

全部标签

c++ - 为什么参数依赖查找不适用于函数模板 dynamic_pointer_cast

考虑以下C++程序:#includestructA{};structB:A{};intmain(){autox=std::make_shared();if(autop=dynamic_pointer_cast(x));}使用MSVC2010编译时,出现以下错误:errorC2065:'dynamic_pointer_cast':undeclaredidentifier如果auto,错误仍然存​​在替换为std::shared_ptr.当我完全符合std::dynamic_pointer_cast的通话条件时,程序编译成功。另外,gcc4.5.1也不喜欢:error:'dynamic_p

c++ - 为什么参数依赖查找不适用于函数模板 dynamic_pointer_cast

考虑以下C++程序:#includestructA{};structB:A{};intmain(){autox=std::make_shared();if(autop=dynamic_pointer_cast(x));}使用MSVC2010编译时,出现以下错误:errorC2065:'dynamic_pointer_cast':undeclaredidentifier如果auto,错误仍然存​​在替换为std::shared_ptr.当我完全符合std::dynamic_pointer_cast的通话条件时,程序编译成功。另外,gcc4.5.1也不喜欢:error:'dynamic_p

c++ - weak_ptr 的性能损失是多少?

我目前正在为游戏设计一个对象结构,在我的例子中,最自然的组织变成了一棵树。作为智能指针的忠实粉丝,我只使用shared_ptr的。然而,在这种情况下,树中的子节点需要访问它的父节点(例如——map上的生物需要能够访问map数据——因此他们的父节点的数据。拥有的方向当然是map拥有它的存在,因此持有指向它们的共享指针。然而,为了从一个存在中访问map数据,我们需要一个指向父级的指针——智能指针的方式是使用一个引用,即weak_ptr。但是,我曾经读到锁定weak_ptr是一项昂贵的操作——也许这不再是真的了——但考虑到weak_ptr会经常被锁定,我担心这种设计注定性能不佳。因此问题:锁

c++ - weak_ptr 的性能损失是多少?

我目前正在为游戏设计一个对象结构,在我的例子中,最自然的组织变成了一棵树。作为智能指针的忠实粉丝,我只使用shared_ptr的。然而,在这种情况下,树中的子节点需要访问它的父节点(例如——map上的生物需要能够访问map数据——因此他们的父节点的数据。拥有的方向当然是map拥有它的存在,因此持有指向它们的共享指针。然而,为了从一个存在中访问map数据,我们需要一个指向父级的指针——智能指针的方式是使用一个引用,即weak_ptr。但是,我曾经读到锁定weak_ptr是一项昂贵的操作——也许这不再是真的了——但考虑到weak_ptr会经常被锁定,我担心这种设计注定性能不佳。因此问题:锁

c++ - 等式比较 std::weak_ptr

我想比较两个std::weak_ptr或一个std::weak_ptr和一个std::shared_ptr是否相等。我想知道的是每个weak_ptr/shared_ptr指向的对象是否相同。不仅如果地址不匹配,而且如果底层对象被删除然后偶然用相同的地址重建,则比较应该会产生负面结果。所以基本上,即使分配器保留相同的地址,我也希望这个断言成立:autos1=std::make_shared(43);std::weak_ptrw1(s1);s1.reset();autos2=std::make_shared(41);std::weak_ptrw2(s2);assert(!equals(w1

c++ - 等式比较 std::weak_ptr

我想比较两个std::weak_ptr或一个std::weak_ptr和一个std::shared_ptr是否相等。我想知道的是每个weak_ptr/shared_ptr指向的对象是否相同。不仅如果地址不匹配,而且如果底层对象被删除然后偶然用相同的地址重建,则比较应该会产生负面结果。所以基本上,即使分配器保留相同的地址,我也希望这个断言成立:autos1=std::make_shared(43);std::weak_ptrw1(s1);s1.reset();autos2=std::make_shared(41);std::weak_ptrw2(s2);assert(!equals(w1

c++ - c++11 中的 intrusive_ptr

C++11是否有与boost::intrusive_ptr等价的东西?我的问题是我的C++代码有一个C风格的界面。接口(interface)的两端都可以使用C++,但出于兼容性原因,需要公开C接口(interface)。我不能使用std::shared_ptr因为我必须通过两个(或更多)智能指针来管理对象。我无法用boost::intrusive_ptr之类的方法找到解决方案。 最佳答案 Doesc++11havesomethingequivalenttoboost::intrusive_ptr?没有。它确实有std::make_s

c++ - c++11 中的 intrusive_ptr

C++11是否有与boost::intrusive_ptr等价的东西?我的问题是我的C++代码有一个C风格的界面。接口(interface)的两端都可以使用C++,但出于兼容性原因,需要公开C接口(interface)。我不能使用std::shared_ptr因为我必须通过两个(或更多)智能指针来管理对象。我无法用boost::intrusive_ptr之类的方法找到解决方案。 最佳答案 Doesc++11havesomethingequivalenttoboost::intrusive_ptr?没有。它确实有std::make_s

c++ - shared_ptr 和 weak_ptr 失败的小例子

我在使用shared_ptr时遇到问题和weak_ptr连同enable_shared_from_this.当我用谷歌搜索我所看到的症状时,每个人都建议“当没有shared_from_this()实例拥有你的对象时,你不能使用shared_ptr。但这不是我的情况。考虑这段代码:#include#includeclassMyClass:std::enable_shared_from_this{public:voidthis_fails(){//Doesn'tevenassert(),becauseitthrowsbad_weak_ptrassert(shared_from_this()

c++ - shared_ptr 和 weak_ptr 失败的小例子

我在使用shared_ptr时遇到问题和weak_ptr连同enable_shared_from_this.当我用谷歌搜索我所看到的症状时,每个人都建议“当没有shared_from_this()实例拥有你的对象时,你不能使用shared_ptr。但这不是我的情况。考虑这段代码:#include#includeclassMyClass:std::enable_shared_from_this{public:voidthis_fails(){//Doesn'tevenassert(),becauseitthrowsbad_weak_ptrassert(shared_from_this()