我正在寻找一种将对象(在我的例子中是 vector<long>
)作为 WPARAM
传递的方法。 C++11 风格。
我发现的教程使用了 C 风格的强制转换或 reinterpret_cast
传递一个指向对象的指针。这就要求消息的接收者在收到该对象后正确处理该对象。
有没有办法使用 unique_ptr
传递对象?接收者可以完全拥有该对象。
最佳答案
如果您将指针传递给带有 Windows 消息的对象,那么您需要确保两件事:
- 在处理消息之前,源不会销毁对象
- 如有必要,目标会正确销毁对象
如果您知道该消息肯定会被处理,那么您可以在发送消息时在源unique_ptr
上调用.release()
,然后取得该消息的所有权处理程序与另一个unique_ptr
。
如果消息没有被处理,问题就在于确保它被清理。这很棘手,因为通常没有一种干净的方法来检查,除非您使用 SendMessage
(而不是 PostMessage
)并使用返回值来传达参数已被声明.
关于c++ - 使用智能指针在窗口消息中将对象作为 WPARAM 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290912/