我有以下场景:
但是,我遇到了一些内存问题,因为我的 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/