В Net есть понятие ссылки на ссылку. Нужно это если мы хотим изменить в нативном коде обьект переданный из виртуальной среды. Это удобный и единственный механизм позволяющий в динамической памяти виртуальной машины получать ссылки и лочить область памяти от перемещения. Но разработчики Net пошли дальше, и увидели в этом потенциальную угрозу потери эффективности. Поэтому они взяли на себя ответственность заявить ,что переменные ссылки на ссылку не могут быть созданы членами класса или глобальными переменными так как в этом случае они могут быть не удалены и оставаться живимы в течении жизни всего процесса. Тем самым избавляя нас от смертельной ошибки использование которой привело бы к неэффективной работе сборщика мусора. Такое решение накладывает массу ограничений на код, который мог быть потенциально реализован еще с большей эффективностью, при правильном программировании. Имя такое ограничение сводить разработку на Managed C++ к программированию на C# и отказ от шаблонной разработки. Так же не возможность передачи параметров.
C#
void main()
{
string s="C#";
call_native(ref s);
print(s);
}
C++ void call_native(interior_ptr s)
{
s=gcnew String("C++");
}


0 коммент.:
Отправить комментарий