我在混合模式下工作(在一个程序集中管理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)我没有释放任何内存,因为两个结构都被管理。好吗?
答案 0 :(得分:1)
您可以考虑使用复制构造函数或类似的东西。查看this article,因为它解释了一些可能有用的内容 我会假设你的记忆模型没问题,因为它都是管理的。
答案 1 :(得分:1)
我不确定你可能需要在memcpy之前固定managedStructure2,查看pin_ptr<>的文档。如果它没有固定,GC可能会在你的memcpy中间的一个单独的线程上发生,导致间歇性的错误。