![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
vito1945 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 16.7.2008 Репутация: нет Всего: нет |
подскажите по такому вопросу:
в с++ 3 разных оператора создают массив 10 объектов 1)MyClass arr[10]; 2)MyClass* ptr = new MyClass[10]; 3)MyClass* ptr[10]; for (int i=0;i<10;i++) ptr[i] = new MyClass(); в с# есть такой оператор MyClass[] arr = new MyClass[10]; arr[i] = new MyClass(); для всех i от 0 до 9 какому блоку с++ из 3-х приведенных выше соответствуют эти два оператора c#? Уж очень похоже на вариант 2, но в с# в операторе "MyClass[] arr = new MyClass[10];" память под объекты не выделится как я понимаю, а выделится под хранение ссылок. как выделяется память в с++, я понимаю,а вот в с# - нет. Поскажите, под что выделяется память в этих двух операторах с#? |
|||
|
||||
Kakadu |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 273 Регистрация: 19.3.2008 Репутация: нет Всего: 7 |
Я плохо понял в чем вопрос, но попробую ответить.
Насколько я знаю, в сишарпе большинство переменных - ссылочного типа, что наводит некоторые ограничения на способ написания. В то же время сишарп позволяет использовать unsafe код примерно так:
Про то, что небезопасный код реализуется именно так я не уверен - не пробовал. -------------------- Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли |
||||
|
|||||
elbjarn |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 13.4.2008 Где: Дубна Репутация: 1 Всего: 3 |
конструкция
как правильно заметил Kakadu, приведет к выделению памяти под 10 ссылок. Каждую ссылку потом (аналог указателя в с++) надо будет инициализировать, присвоив ей ссылку на созданный объект MyClass.
1-й способ создаст указатель MyClass*, указывающий на первый элемент массива из 10 объектов (объекты будут созданы с использованием конструктора по умолчанию); 2-й способ идентичен первому, за исключением того, что память выделится не на стеке, а в куче (оператор new); 3-й способ (внимание) выделит на стеке 10 указателей, а объектов не будет создано ни одного. таким образом, можно сказать, что создание массивов в c# аналогично третьему вашему варианту. и насколько я понимаю, в сишарпе
будет не просто аналогом указателя на массив, как в с++, а полноценным объектом класса Array, который содержит набор методов и свойств (Length, GetAt() и тд), поэтому и памяти будет занимать больше, чем просто один указатель. |
||||||
|
|||||||
vito1945 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 16.7.2008 Репутация: нет Всего: нет |
|
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
vito1945, int - это value type, соответственно выделит память под 10 объектов типа int
-------------------- СУВ, Partizan. |
|||
|
||||
elbjarn |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 13.4.2008 Где: Дубна Репутация: 1 Всего: 3 |
абсолютно верно ![]() то же относится и к другим значимым типам (double, DateTime, short и тд). имя переменной значимого типа обозначает саму переменную, а не ссылку на нее. при передаче в функции эти переменные также передаются по значению, а не по ссылке, т.е. создается копия. если нужно передать по ссылке, используют конструкцию
а - переменная, передаваемая по ссылке, date - переменная, передаваемая по ссылке, которая обязана быть инициализирована внутри функции Func(). Это сообщение отредактировал(а) elbjarn - 11.10.2008, 10:39 |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |