Класс значений в C ++ / CLI - PullRequest
10 голосов
/ 14 февраля 2012

Каковы преимущества использования класса значений в C ++ / CLI. Может ли класс значений содержать функции-члены?

1 Ответ

15 голосов
/ 14 февраля 2012

a value class - это ValueType - это означает, что всякий раз, когда вы присваиваете его другой переменной того же типа, весь объект копируется в другую переменную, оставляя вам две отдельные копии,Примерами этого являются базовые числовые типы данных, такие как int, bool или double.ValueTypes запечатаны, что означает, что вы не можете извлечь из них.

A ref class - это ссылочный тип - если вы присваиваете его другой переменной того же типа, вы копируете только ссылку.Таким образом, две переменные в основном «указывают» на одни и те же данные.

Таким образом, основное различие между value class и ref class заключается в семантике копирования.Оба могут содержать методы, свойства полей и так далее.Кроме того, вы не можете получить производные от value class.

Разница между использованием ключевых слов class и struct в этом контексте - это видимость членов по умолчанию.Это private для ref/value class и public для ref/value struct.

Распространенным заблуждением является то, что значение / ref указывает место хранения (значение = стек, ref = куча).Место хранения каждого объекта, будь то ValueType или ссылочный тип, является подробностью реализации, на которую никто не должен полагаться или делать предположения, и только на усмотрение среды выполнения, какое место хранения подходит в любом данном контексте.

...