10得票1回答
我需要使用weak_ptr.lock()来测试它是否指向一个有效的对象吗?

看起来创建一个临时的shared_ptr以检查weak_ptr是否指向有效对象有点低效。 我不想访问对象本身。 这是因为我有一个从shared_ptr向量返回weak_ptr的函数,如果它返回一个空的weak_ptr,则意味着该GUID下不存在该对象。 所以我只是在测试对象是否存在。 有没有...

10得票3回答
owner_less的意义是什么,如果一个过期的weak_ptr会导致未定义的行为?

请考虑到我的经验不足,但我不理解std::owner_less的意义所在。 我已经看到了一个使用weak_ptr作为键的map不被推荐,因为过期的weak_ptr键会破坏map,实际上: 如果它过期了,那么容器的顺序就被打乱了,试图在之后使用容器将会导致未定义的行为。 这种行为有多么...

9得票2回答
shared_ptr和循环引用问题

我正在尝试使用循环引用来操作 boost::shared_ptr,并设计了以下示例: class A{ // Trivial class public: i32 i; A(){} A(i32 a):i(a){} ~A(){ cout<&l...

9得票2回答
构造函数中的弱指针this

我理解在类的构造函数中无法通过调用shared_from_this()获取shared_ptr,因为对象尚未构造。但是,在构造函数中是否可以获取指向对象的weak_ptr呢?一些讨论"weak_from_raw()"方法的boost论坛帖子表明这可能是有可能的。 编辑:讨论weak_from...

8得票2回答
使用weak_ptr实现观察者模式

目前我拥有的是: Observer.h class Observer { public: ~Observer(); virtual void Notify() = 0; protected: Observer(); }; class Observable { pu...

8得票1回答
在std::set中使用weak_ptr安全吗?或者在std::map的key中使用weak_ptr安全吗?

今天关于std::weak_ptr和std::owner_less在关联容器std::set和std::map中的使用,出现了一些问题。有一些帖子认为在std::set中使用weak_ptr是不正确的,因为如果弱指针过期,它将产生未定义行为。这是正确的吗?

8得票1回答
这个线程sanitizer警告中的竞争条件在哪里?

下面的代码在macOS上使用线程安全检测时会产生警告。我看不出其中竞态条件出现的位置。shared_ptr和weak_ptr的控制块是线程安全的,从std :: queue中推入和弹出元素时都在锁定状态下完成。 #include <future> #include <mem...

7得票2回答
我该如何追踪C++11 lambda中对象的生命周期?

有时候,我们对于捕获对象状态的 lambda 表达式的生命周期一无所知(例如从对象返回它、将其注册为回调函数但无法取消订阅等)。如何确保在调用时 lambda 不会访问已经被销毁的对象? #include <iostream> #include <memory> #i...

7得票2回答
同一enable_shared_from_this实例的两个shared_ptr

考虑到这个类是enable_shared_from_this, class connection : public std::enable_shared_from_this<connection> { //... }; 假设我使用以下方式从相同的 connection*...

7得票3回答
使用shared_ptr和weak_ptr时避免间接循环引用问题

我正在开发一个应用程序,它严重依赖于shared_ptr,目前一切看起来都很好 - 我已经做了功课,对使用shared_ptr的一些陷阱有了相当清晰的认识。 shared_ptr最为人所知的问题之一是循环依赖 - 这些问题可以通过存储不影响上游对象生命周期的weak_ptr来解决。然而,我在...