|
189 / 177 / 111
Регистрация: 22.06.2009
Сообщений: 533
|
|
В чем отличие ref class от value class, где какой следует использовать?09.10.2014, 11:15. Показов 11798. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|