![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
способ создания массива: 1. использование malloc - это си-стиль который не приветствуется в с++ и категорически неприемлим для выделения памяти под неплоские объекты (те у которых есть конструктор) - а именно это происходит во второй строчке кода 2. c1 - указывает на массив объектов, а не на массив указателей - что подтверждает пункт 1 3. c1+i - про это писалось выше 4. p = new Class1(value); - тут правильно все создается , только p указывает совершено не туда куда надо.. Самое интересное что это будет работать.. вот поэтому я и назвал ужос... Добавлено через 2 минуты и 37 секунд
вот и ответ.. не понимаете как работает new, чем отличается от malloc, да и вобше какие бывают способы расположения обьектов в памяти |
|||
|
||||
yep |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
Повторяю, я прекрасно осознаю, что написал. С чего вы решили, что если я и хотел выделить память по объекты класс1, то я чего-то не осознаю? Программа работает как надо.
Поэтому я и спросил как эту строку записать при помощи new Добавлено @ 00:41
а здесь что не так? я так и задумал заполнили кусок памяти равный класс1, сдвинулись на класс1 дальше, заполнили следующий кусок... Добавлено @ 00:44
??? с чего вы взяли? Добавлено @ 00:45 я использовал malloc только(!) потому что не знаю как это написать через new, как я уже неоднократно писал Добавлено @ 00:48 c1 = (Class1 *)malloc(sizeof(Class1)*10); если написать c1 = new Class1[10], даже если будет конструктор по умолчанию это будет, насколько я понимаю, лишняя трата времени на создание 10 объектов, которые всё равно придётся пересоздавать с нужным конструктором Это сообщение отредактировал(а) yep - 9.8.2008, 00:49 |
||||
|
|||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот удовлетворяю Ваше любопытство.. тот способ про который Вы спрашивали (но не советую использовать)
|
||||
|
|||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот и я о том же Добавлено через 51 секунду в данном контексте нужен лишь для выделения памяти |
|||
|
||||
yep |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
А вот ещё что интересует. Среди полей есть ещё статические массивы. В установочных методах делаю проверку на выход за пределы. Если выход есть, делаю исключение. Вот и подумал использовать вектор вместо массива чтобы не делать проверку, или есть что-то более подходящее? Как обычно поступают?
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
если неуверен, что попадаешь в нужный диапазон в любом случае надо делать проверку, будь хоть обычный массив , хоть вектор. Единственное что у вектора есть метод at, aналогичный [] , но возбуждает исключение при выходе за границы |
|||
|
||||
yep |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 10.9.2007 Репутация: нет Всего: нет |
А [] разве не возбуждает? У меня в VS2008 возбуждает
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |