0

私は混合モードで作業しています (1 つのアセンブリで C++ と C++ を管理しています)。私はこのような状況にあります。

ManagedStructure ^ managedStructure = gcnew ManagedStructure();
//here i set different properties of managedStructure 

次に、以下の「メソッド」を呼び出して「& managedStructure」に渡します

Method(void *ptrToStruct)
{
    ManagedStructure ^ managedStructure2 = gcnew ManagedStructure();
    memcpy(&managedStructure2 , ptrToStruct, sizeof(managedStructure2 ));
}

このシナリオについて次の質問があります。

1) このように memcpy を使用しても安全ですか? そうでない場合、同じ機能を実現するための代替手段は何ですか? (「メソッド」の定義を変更することはできません)

2) 両方の構造が管理されているため、メモリを解放していません。大丈夫ですか?

4

2 に答える 2

1

コピー コンストラクターなどを使用して調べることができます。役に立つかもしれないいくつかのことを説明しているので、この記事をチェックしてください。
すべて管理されているため、メモリモデルは問題ないと思います。

于 2010-04-01T12:03:47.097 に答える
1

よくわかりませんが、memcpy の前に managedStructure2 を固定する必要があるかもしれません。pin_ptr<> のドキュメントを参照してください。固定されていない場合、memcpy の途中で別のスレッドで GC が発生し、断続的なバグが発生する可能性があります。

于 2010-04-01T12:10:59.167 に答える