Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:
Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference
или даже (чаще) a KeyNotFoundException
при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.
Если код NullReferenceException
задан кодом unsafe
, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero
или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.
(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)
Поскольку указатель на struct всегда указывает на его первый член (поскольку структура выложена последовательно).
В C ли указатель на структуру всегда указывает на его первый член?
(C1x §6.7.2.1.13: " Указатель на структурный объект, соответствующим образом преобразованный, указывает на его начальный член ... и наоборот. В качестве объекта структуры может быть неназванное дополнение, но не в его начале. »)
blockquote>ПРИМЕЧАНИЕ: mange указывает, по праву, что если вы начнете добавлять виртуальные функции к своей структуре, C ++ реализует это, вставив vtable в начале вашей структуры ... что делает мое утверждение (которое верно для C) неверным, когда вы говорите обо всем, что вы могли бы сделать с «структурами» на C ++.
Потому что они в одном месте. Первый элемент в struct A
является struct B
, поэтому они фактически находятся в одном и том же месте памяти (после этого b
будет помещено что-либо еще в struct A
).
Аналогичным образом x
- первый бит данных в struct B
, поэтому он находится в том же положении, что и struct B
.
Очень важно отметить, что это не всегда будет верно. Такие вещи, как виртуальные функции, заставят вещи двигаться. Это верно в этом случае, потому что они простые классы / структуры.
Если вы стоите на границе своей страны с чашкой кофе в руке, ваши координаты, координаты границы и координаты кофейной чашки будут иметь одинаковое значение на устройстве GPS.
Первый элемент первого ребенка находится на начальном адресе объекта. Имена для вашего удобства компьютеры работают с адресами памяти. Вы можете назвать их так, как хотите, но расположение памяти зависит от порядка и иерархии элементов данных.