c++ - 使用智能指针在窗口消息中将对象作为 WPARAM 传递

标签 c++ mfc c++11

我正在寻找一种将对象(在我的例子中是 vector<long> )作为 WPARAM 传递的方法。 C++11 风格。

我发现的教程使用了 C 风格的强制转换或 reinterpret_cast传递一个指向对象的指针。这就要求消息的接收者在收到该对象后正确处理该对象。

有没有办法使用 unique_ptr 传递对象?接收者可以完全拥有该对象。

最佳答案

如果您将指针传递给带有 Windows 消息的对象,那么您需要确保两件事:

  1. 在处理消息之前,源不会销毁对象
  2. 如有必要,目标会正确销毁对象

如果您知道该消息肯定会被处理,那么您可以在发送消息时在源unique_ptr上调用.release(),然后取得该消息的所有权处理程序与另一个unique_ptr

如果消息没有被处理,问题就在于确保它被清理。这很棘手,因为通常没有一种干净的方法来检查,除非您使用 SendMessage (而不是 PostMessage)并使用返回值来传达参数已被声明.

关于c++ - 使用智能指针在窗口消息中将对象作为 WPARAM 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290912/

相关文章:

c++ - 如何在 C/C++ 中使用 SSHA1?

c++ - 函数模板中的类型参数

c++ - 在 MFC 应用程序的 IE Web 浏览器控件中运行用户脚本

c++ - MFC - 并行记录和查看

c++ - 强制 auto 成为循环范围内的引用类型

c++ - 在 C++ 中提取蓝牙低功耗广告数据

c++ - 如何使用 Handler 和 boost::asio::async_result

c++ - 在 MFC 中将 CFrameWnd 更改为 CFrameWndEx 会导致未处理的异常 - 有什么想法吗?

c++ - 初始化程序中的多个突变是否列出了未定义的行为?

c++ - 如何用用户输入变量制作二维数组?