14得票1回答
存储指向自身的弱引用

我正在使用一个部分由一个喜欢为简单问题提供过度复杂解决方案的人实现的代码库(例如,仅为一对类型实例化的具有两个参数的模板类)。她做的一件事是在智能指针中创建对象,然后让该对象存储对自身的弱引用。class MyClass { //... boost::weak_ptr<M...

13得票1回答
在C++中,共享指针、弱指针和懒惰指针是什么?

有没有人知道一个同时使用 shared_ptr 和 weak_ptr 的延迟初始化类实现?这些类的要求是: 一个 lazy_ptr 类,允许客户端稍后构造对象(如果需要),而不需要构造函数的实现 一个 weak_lazy_ptr 类,具有三种可能的状态:尚未构造(不会锁定到 shared_...

11得票3回答
有没有类似于shared_from_this的weak_ptr等效物?

我有一个类,我知道它 永远 将由一个 std::shared_ptr 拥有。但是将 shared_ptr 或甚至不需要所有权或生命周期保证的函数和方法传递给它会产生不必要的开销。为了解决这个问题,我经常将原始指针传递给函数。该类本身继承自 std::enable_shared_from_thi...

11得票3回答
智能指针 + 循环引用 + "->"

有时候我确信希望指针有循环依赖性,并且循环上的每个对象都应该能够使用它的指针(因此不能使用weak_ptr)。 我的问题是:这是否意味着我的设计不好? 如果我想要实现图形,怎么办?我可以使用智能指针吗?在图形中存在循环,但是使用weak_ptr时无法使用“->”。 我能做什么? 我阅读了...

11得票3回答
如何在容器中消除weak_ptrs

我有一个类,其中在容器中存储了weak_ptr,并且稍后进行某些操作,如果该weak_ptr未过期:class Example { public: void fill(std::shared_ptr<int> thing) { member.push...

11得票2回答
如果我注意到一个weak_ptr已经过期了,我应该调用reset吗?

我有一个Creature对象的集合,它们在应用程序的某个部分使用std::make_shared和std::shared_ptr创建和拥有。 我还使用std::weak_ptr<Creature>在World对象中跟踪选择的零个或一个Creature。 void World::...

11得票1回答
当shared_ptr被销毁后,weak_ptr会发生什么?

似乎weak_ptr会在其所引用的shared_ptr被销毁时自动知晓。这是怎么做到的呢?是否有一个持续的链接或其他什么东西? 以以下代码为例: weak_ptr<int> test() { shared_ptr<int> foo{new int}; ...

11得票1回答
weak_from_this() 在构造函数中的使用

我知道你不能在构造函数中使用shared_from_this。但是在构造函数中使用新的weak_from_this可以吗?根据cppreference的说明: 这是enable_shared_from_this的一个私有可变weak_ptr成员的副本。 http://en.cppref...

10得票2回答
为什么std::weak_ptr没有operator->运算符?

可以这样实现: std::shared_ptr<T> operator->() { auto shared = lock(); if(shared == nullptr) { throw std::bad_weak_ptr()...

10得票1回答
当调用删除器时,shared_ptr是否仍然拥有其对象?

我有一个带有自定义删除器的std::shared_ptr,在该删除器中,我想要获取原始std::shared_ptr的临时副本。代码表示如下: struct Foo : public std::enable_shared_from_this<Foo> {}; void dele...