2012-07-02 22 views
0

我正在尋找一種方式將C++ 11樣式中的對象(vector<long>在我的案例中)作爲WPARAM傳遞給我。使用智能指針將對象作爲WPARAM傳遞到窗口消息中

我發現的教程使用C風格演員或reinterpret_cast傳遞指向對象的指針。這要求消息的接收者在收到消息後妥善處理。

有沒有辦法通過使用unique_ptr來傳遞對象?收件人可以完全擁有該對象。

+0

可能重複http://stackoverflow.com/questions/7130633/how-to-use-postthreadmessage-to-pass-a-struct/7130683#7130683。 – rodrigo

回答

3

如果你傳遞一個指向對象與Windows消息,那麼你需要確保兩兩件事:

  1. 源不破壞對象的消息被處理
  2. 目的地之前正確銷燬對象,如果有必要

如果您知道該消息一定會再處理,您可以在發送消息時,源unique_ptr上調用.release(),然後採取所有權在哈ndler與另一個unique_ptr

如果郵件未處理,確保清除問題。這很棘手,因爲除非您使用SendMessage(而不是PostMessage),並且使用返回值來傳達參數已被聲明,否則通常沒有乾淨的方法來檢查。

1

有沒有這樣的方式。 WPARAM在頭文件中定義爲UINT_PTR。它只是一個足夠大的數字,可以在所有體系結構中接受指針。你可以傳遞一個指針的原因是指針本身就是數字。

1

你可以做下面的技巧:你分配一個shared_ptr<>上堆,指針傳遞給它作爲WPARAM,複製上收到shared_ptr<>和刪除您有作爲WPARAM的一個(!)。

相關問題