Хобрук: Ваш путь к мастерству в программировании

Почему неуправляемая структура не может быть членом управляемого класса?

Я знаю, что в С++/CLI нельзя использовать неуправляемые типы при определении управляемого класса:

public struct Unmanaged
{
    int x;
    int y;
};

public ref class Managed
{
    int one;
    Unmanaged two;  //error C4368
};

Я не понимаю, почему, хотя. Unmanaged - это просто набор нативных типов - его размер известен, конечно, он (и под ним я подразумеваю блок памяти, который его определяет) будет перемещаться вместе с "блоком памяти", который находится Managed внутри "управляемой кучи" , и любое смещение, сохраненное в метаданных, останется действительным, не так ли? Так же, как если бы было объявлено целое число или число с плавающей запятой?

Почему нельзя смешивать типы?


  • Кто, по-вашему, сможет авторитетно ответить на такой вопрос? 10.05.2012
  • @ildjarn ну, я как раз собирался проверить исходный код C++/CLI и написать хороший ответ... подожди 10.05.2012
  • Боюсь, я не понимаю; кто-то с большим знанием работы C++/CLI, чем я? При разработке компилятора у кого-то должно быть было такое же предположение, которое я утверждаю в своем посте (или предположение совершенно неверно!), а затем понял, что для какого-то условия оно не выполняется, отсюда и ошибка - мне просто было любопытно что это было за условие. В сообщении в блоге, на которое ссылается Тони, было объяснено, что выделение нативных типов в управляемой куче было запрещено, чтобы люди не злоупотребляли pin_ptr для возврата этих «экземпляров» в неуправляемый код. 10.05.2012

Ответы:


1

Смешанный тип фактически относится к смешанным моделям памяти. Неуправляемые типы помещаются в кучу, управляемые типы отправляются в кучу со сбором мусора, поэтому, когда вы встраиваете неуправляемый тип в управляемый, потребуется память в обеих кучах, поэтому вы делаете такие вещи с указателем. Указатель управляем, значение, на которое он указывает, — нет.

Мне самому было любопытно, поэтому я собрал свой google и нашел это.

http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx

Парень, похоже, знает, о чем говорит.

Хотя вопрос хороший...

09.05.2012
  • В этом посте есть полезная информация, большое спасибо! Это заставляет меня задаться вопросом, сколько других языковых характеристик было разработано исключительно для предотвращения ошибок программистов (я считаю, по крайней мере, одну в C#; никаких провалов в операторах switch) 10.05.2012
  • Новые материалы

    Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
    Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

    AST для разработчиков JavaScript
    TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

    5 проектов на Python, которые нужно создать прямо сейчас!
    Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

    Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
    DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

    «Очень простой» эволюционный подход к обучению с подкреплением
    В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..