vector<long>
オブジェクト (私の場合) をWPARAM
C++11 スタイルとして渡す方法を探しています。
reinterpret_cast
私が見つけたチュートリアルでは、オブジェクトへのポインターを渡すためにC スタイルのキャストまたは aを使用していました。これには、メッセージの受信者がオブジェクトを受信後に適切に破棄する必要があります。
を使用してオブジェクトを渡す方法はありunique_ptr
ますか? 受信者は、オブジェクトの完全な所有権を取得できます。
Windowsメッセージを含むオブジェクトへのポインタを渡す場合は、次の2つのことを確認する必要があります。
.release()
メッセージが確実に処理されることがわかっている場合は、メッセージを送信するときにソースを呼び出してからunique_ptr
、別のハンドラーの所有権を取得できunique_ptr
ます。
問題は、メッセージが処理されない場合に確実にクリーンアップされることにあります。SendMessage
これは注意が必要です。通常、 (ではなくPostMessage
)を使用し、戻り値を使用してパラメーターが要求されたことを通知しない限り、チェックするためのクリーンな方法はありません。
そのような方法はありません。WPARAMは、ヘッダーでUINT_PTRとして定義されています。これは、すべてのアーキテクチャでポインタを受け入れるのに十分な大きさの数値です。ポインタを渡すことができる理由は、ポインタ自体が実際には単なる数値だからです。
次のトリックを実行できます:shared_ptr<>
オン ヒープ(!) を割り当て、そのポインターを WPARAM として渡し、shared_ptr<>
受信時に をコピーし、取得したものを として削除しますWPARAM
。