Last Updated 2004/10/15
Programming Tips Visual C++ MFC ドラッグアンドドロップ  索 引 
ドラッグアンドドロップデータの削除タイミング
2004/10/15

COleDataSource *oleData = new COleDataSource();
oleData->CacheGlobalData(CF_TEXT, hNd, NULL);
DROPEFFECT retEfe = oleData->DoDragDrop(DROPEFFECT_COPY, NULL, NULL);
delete oleData;        // ここで delete して良い?


ドラッグ開始時に生成した COleDataSource オブジェクトは,用済みになった場合 COleDataSource::OnFinalRelease() が呼び出されて基底クラスの処理で delete される.
だから明示的に delete する必要はない.

DoDragDrop() が戻ってきた時にはドラッグが終わっているので明示的に delete しても問題ないと思えてしまうがそうではない.COleDataSource はクリップボード経由の処理にも使用されるもので,クリップボードの処理はモーダルで完了するわけではない.(COleDataSource のインスタンスが不要になるタイミングを特定できない)


参照
前後のTips
ドラッグアンドドロップデータの削除タイミング

DSS ProgrammingTipsCGI Ver2.01