问题是对象可能在协程完成之前被销毁。
我已经通过使用C++/WinRT工具解决了这个问题。但我感兴趣的是你如何用c++标准库解决它。
这个问题被无耻地从https://learn.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/weak-references中重新利用了
struct MyClass
{
std::string m_value{ "Hello, World!" };
Task<std::string> RetrieveValueAsync()
{
co_await 5s; // resumes on thread pool
co_return m_value;
}
};
int main()
{
auto instance = std::make_shared<MyClass>();
auto async = instance->RetrieveValueAsync();
instance = nullptr; // Simulate the class instance going out of scope.
std::string result = async.get(); // Behavior is now undefined; crashing is likely.
std::cout << result.c_str() << std::endl;
}
2条答案
按热度按时间gpnt7bae1#
也可以使用
std::enable_shared_from_this<>
vjrehmav2#
你需要做的是在协程中找到
shared_ptr
。