c++ - 气候依赖和共享指针和弱指针

标签 c++ smart-pointers

我有以下场景:

enter image description here

但是,我遇到了一些内存问题,因为我的 Dispatcher 似乎在发送到 Window 之前就被删除了。

伪代码看起来像这样:

class Kernel
{
    shared_ptr<Window> window;
    shared_ptr<Dispatcher> dispatcher;
}

class Window
{
    weak_ptr<Dispatcher> dispatcher;
}

class Dispatcher
{}

如何正确使用智能指针来解决这个问题?

最佳答案

我写了例子 http://cpp.sh/8dkv7

如您所见,您的代码是正确的:

  #include <iostream>
  #include <memory>

  class Dispatcher;
  class Window;

  class Kernel
  {
  public:
    std::shared_ptr<Window> window;
    std::shared_ptr<Dispatcher> dispatcher;
  };

  class Window
  {
  public:
    std::weak_ptr<Dispatcher> dispatcher;
  };

  class Dispatcher
  {
  };

  int main()
  {
    Kernel k;
    k.window = std::make_shared<Window>();
    k.dispatcher = std::make_shared<Dispatcher>();
    k.window->dispatcher = k.dispatcher;
    if( auto dispatcher = k.window->dispatcher.lock() ) {
        std::cout << "ok\n"; // i see ok, what about you?
    }
  }

关于c++ - 气候依赖和共享指针和弱指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629100/

相关文章:

c++ - 多线程环境中的智能指针

c++ - 可以使用模板按名称访问结构变量吗?

c++ - 为什么 `make_unique`使用 `new`而make_shared使用 `::new`

c++栈对象的shared_ptr

c++ - 数组到变量

c++ - 多态局部变量的逼近

c++ - 为什么在使用 unique_ptr 时没有调用析构函数?

c++ - 链表析构函数

c++ - 为什么opencv的HOG描述符会返回这么多值

c++ - 从 double 到整数的显式类型转换是否总是检查整数溢出?