|
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
|
|
В чем отличие ref class от value class, где какой следует использовать?09.10.2014, 11:15. Показов 11862. Ответов 9
Метки нет (Все метки)
САБЖ, мало по мало изучаю C++/CLI.. В голове каша, хотелось бы как то фундаментально осмыслить и запомнить в каких случаях нужно использовать ссылочный класс (ref class) и класс значений(я?) (value class). И почему...
П.С немного не там опубликовал, перенесите суда "Форум C++/CLI". Спасибо
0
|
|
| 09.10.2014, 11:15 | |
|
Ответы с готовыми решениями:
9
Java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation В чем отличие typename от class? Разъясните код пжлст(выдает ошибку:cannot convert from 'class std::list<class c_bullet *,class std::allocator<class c_bullet *> >::iterator' to 'int') |
|
Комп_Оратор)
|
|
| 10.10.2014, 01:15 | |
|
worldown, посмотрите этот топик:
Основные отличия C# от C++ CLI даже если Вы не знакомы с C#. Отличия ссылочных типов от типов значений хорошо описаны именно в литературе по C#, которой очень много, в отличие от C++/CLI. Кратко говоря, это два рода управляемых типов, которые по разному наследуют от общего родители System.Object. Ссылка это имя, которое ссылается на память. Но в отличие от ссылок С++, она может быть объявлена без инициализации и это роднит её с указателем С++. Имя переменной типа значения ведёт себя подобно имени стековой переменной. Совершенно ясно, что у типов значений и ссылочных, разный синтаксис, в частности: объявления, определения и разная семантика поведения, в частности: копирования, присваивания, сравнения, передачи в функцию в качестве аргумента. Писать обо всём этом просто неподъёмно, поэтому поищите и почитайте. Нужно сказать, что управляемые строки String^ это ссылочные типы, но с семантикой класса значений при передаче в функцию. Важно ещё то, что строка это внутренне не изменяемый объект, то есть когда Вы изменяете строку, она пересоздаётся и ссылка изменяет значение. ![]() К типам значений относятся простые встроенные типы и структуры. Они копируются сравниваются и передаются по значению и это не должно вызвать проблем, так как семантически сходно с С++. Для быстрых операций с большим объёмом простых данных или многократно повторяющихся операций с небольшим объёмом, быстрее использовать типы значений. Память выделяется и освобождается механизмом стека. К ссылкам относятся имена экземпляров классов. Экземпляры создаются только в управляемой куче. Память выделяется и освобождается cборщиком мусора. Для того чтобы связать имя с объектом, нужно или приравнять другой инициализированной ссылке или создать объект в куче явно при помощи оператора-функции gcnew. При копировании и сравнении копируются и сравниваются ссылки. Это значит, в частности, что две ссылки указывающие на один объект равны, а две ссылки указывающие на два совершенно идентичных объекта (при почленном сравнении), но расположенных в разных участках памяти, не равны. И тут ссылки более похожи на указатели. Поэтому их иногда называют управляемый указатель/дескриптор. Еще более роднит доступ к членом с использованием оператора ->. Для того чтобы переопределить семантику копирования и сравнения, нужно унаследовать от интерфейсов IComparable, IClonable и определить виртуальные методы которые это будут делать самостоятельно. В функции,экземпляры ссылочного типа передаются по ссылке. Лучше всего почитайте об этом.
2
|
|
|
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
|
||||||||||||||
| 10.10.2014, 11:29 [ТС] | ||||||||||||||
|
IGPIGP, Спасибо. Так по порядку :
![]() ![]()
1) Что бы создать объект класса через отслеживаемый дескриптор , он же динамический объект он же в ISO/IEC аналог указателя. Нужно:
В том то и дело, что читаю, читаю... и от этого только какая то каша без комьев ..
0
|
||||||||||||||
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
||||||||
| 10.10.2014, 11:48 | ||||||||
Если пишите класс, делайте его ref, если хотите сделать его значимым - пишите struct. worldown, по какой книге изучаете этот язык и с чем связан ваш выбор? Добавлено через 7 минут Разница между value class и value struct только в модификаторе доступа по умолчанию,в классах private,в структурах - public.(Это применимо и для ссылочных типов,так что пользуйтесь,тем что больше нравится).
1
|
||||||||
|
Комп_Оратор)
|
||
| 10.10.2014, 13:29 | ||
|
Но сложные структуры данных не нужно пытаться создавать как структуры значений. Более того, если Вы используете классы NET то Вам и не удастся, это сделать, потому что value types не могут содержать ref, а если не используете, то зачем Вам вообще С++/CLI? Ссылочные типы позволяют делать то, чего не позволяет STL/C++. Вы можете делать быстро и не занимая кучу памяти, практически всё, что требуется, для обработки информации. Оперируя единожды созданным набором объектов, можно создавать кучу наборов из них тратя память только на новые ссылки. ![]() В С++ нельзя создать массив ссылок. И понятно почему, - ссылка объявляется и инициализируется одновременно, а массив, сначала выделяет память под умолчательные объекты, а потом использует копирование. Кроме того, даже на примере создания, видно сколько лишней работы. И при использовании moove-семантики всё равно время тратится. Я не хочу холивара и прошу плюсовиков, сдержаться. Сам лично, люблю С++/native и... други я с Вами и NOPASARAN. ![]() Ещё одно. Управляемые типы диктуются системой. Их свойства не так прозрачны как свойства простых указателей, но это как раз прозрачно. Нельзя получить адрес, который нет смысла использовать, потому что это информация о том, где находился объект в момент его определения. С адресной арифметикой, и сравнением та же причина.
1
|
||
|
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
|
|||||
| 10.10.2014, 15:30 [ТС] | |||||
|
S_el
Т.е объект класса String^ переопределить через функцию ни как не получится? или под св-свами Вы имеете ввиду что то другое ?? Выбор определила книга =) Добавлено через 53 минуты IGPIGP, Из Вашего поста я понял следующее: Если класс || структура выходит довольно таки сложной, нужно использовать ref , плюс его в том что будут доступны всякие вкусности .Net, которые облегчают труд разработчика и не загружает память. Так ? Можно пример.. ну не могу я догнать смысл мысли о смысле =( Не по теме: В общем, чувствую что мне пока рановато задавать такие не скромные вопросы.
0
|
|||||
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
|||||||||||||
| 10.10.2014, 15:57 | |||||||||||||
|
А про то,что свойства могут быть у классов-значений,я не знал.
![]() Добавлено через 4 минуты Добавлено через 1 минуту
2
|
|||||||||||||
|
Комп_Оратор)
|
||||
| 10.10.2014, 17:49 | ||||
|
worldown, я отвечу на этот пост, так как ответы S_el, вполне удовлетворительны:
![]()
0
|
||||
|
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
|
||||
| 10.10.2014, 18:21 | ||||
0
|
||||
|
Комп_Оратор)
|
||||||||
| 10.10.2014, 19:32 | ||||||||
![]() А что, в действительности, непонятно в том, что я написал о типах значений? Ну читаете Вы данные из файла, допустим. Потоки - ссылочные типы и чтение идет в буфер располагаемый в куче. Потом
1
|
||||||||
| 10.10.2014, 19:32 | |
|
Помогаю со студенческими работами здесь
10
Подскажите где можно использовать class Stack В чем разница между ID и Class и что лучшие использовать? Что где использовать? Где ID, где class? bad class file: C:Program FilesJavajre1.5.0_02lib t.jar(java/lang/Object.class) class file has wrong version 49.0, should be 48.0 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|