Использование memcpy для копирования управляемых структур - PullRequest
0 голосов
/ 01 апреля 2010

Я работаю в смешанном режиме (управляемый 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) Я не освобождаю память, поскольку обе структуры управляются. Это нормально?

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Я не уверен, но вам может понадобиться закрепить managedStructure2 перед memcpy, посмотрите документацию для pin_ptr <>. Если это не закреплено, GC может произойти в отдельном потоке в середине вашего memcpy, что приведет к периодической ошибке.

1 голос
/ 01 апреля 2010

Вы можете использовать конструктор копирования или что-то подобное.Прочтите эту статью , поскольку она объясняет несколько вещей, которые могут быть полезны.Я бы предположил, что с вашей моделью памяти все в порядке, так как все управляется.

...