Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли так делать? 
:(
    Опции темы
Mormishka
Дата 7.1.2011, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Можно ли так выделять память для классов?
class elem {
}

elem *m=(elm*) new BYTE[sizeof(elem)*Count];
PM MAIL   Вверх
Dem_max
Дата 7.1.2011, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 4
Всего: 39



можно


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
azesmcar
Дата 7.1.2011, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Mormishka @  7.1.2011,  18:47 Найти цитируемый пост)
Можно ли так выделять память для классов?

Да, через оператор new можно.
Код

BYTE m[sizeof(elem)*Count];

так нельзя.

Но учти, память выделять можно, но использовать такой объект естественно нельзя, пока он не сконструирован. Надо вручную вызывать конструктор(ы) на выделенной памяти.


Это сообщение отредактировал(а) azesmcar - 7.1.2011, 19:21
PM   Вверх
Mormishka
Дата 7.1.2011, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



[QUOTE=azesmcar,7.1.2011,  19:16]
Цитата(Mormishka @  7.1.2011,  18:47 Найти цитируемый пост)

BYTE m[sizeof(elem)*Count];
[/code]
так нельзя.

Так можно или нет?
Можно использовать как массив?
m[0],m[1]...m[count]
PM MAIL   Вверх
azesmcar
Дата 7.1.2011, 19:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Mormishka @  7.1.2011,  19:33 Найти цитируемый пост)
Так можно или нет?

через operator new() - можно

Цитата(Mormishka @  7.1.2011,  18:47 Найти цитируемый пост)
elem *m=(elm*) new BYTE[sizeof(elem)*Count]; 

так можно, но только выделять, использовать его в дальнейшем как массив объектов нельзя, так-как это просто сырая память, объектов как таковых там нет.

Добавлено @ 19:35
Цитата(Mormishka @  7.1.2011,  19:33 Найти цитируемый пост)
m[0],m[1]...m[count] 

вот m[Count] точно нельзя smile

посмотри пример, разъяснения в комментариях
Код

#include <iostream>

class X {
   int i;
public:
   X() : i(10) {};
   void print(){ std::cout << i << std::endl; }
};

int main()
{
   // выделяем память. пока что это сырая память, в ней нет объекта
   char *buffer = new char[sizeof(X)];
   // вызываем конструктор на выделенной памяти, т.е. создаем обьект
   new (buffer) X();
   // вот теперь объект создан, можно использовать
   X *xptr = (X*) buffer;
   xptr->print();
   // теперь также вручную вызываем деструктор
   xptr->~X();
   // теперь объект удален, но память все еще не очищена. очищаем...
   delete [] buffer;
}



Это сообщение отредактировал(а) azesmcar - 7.1.2011, 19:41
PM   Вверх
Mormishka
Дата 8.1.2011, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Что это значит?
Код

X() : i(10) {};

Как сделать n*m объектов и создать двумерный массив m*n указателей на эти объекты?

Это сообщение отредактировал(а) Mormishka - 8.1.2011, 09:50
PM MAIL   Вверх
azesmcar
Дата 8.1.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(Mormishka @  8.1.2011,  09:16 Найти цитируемый пост)
Что это значит?

Это инициализация члена класса i значением 10.
Расскажи о задаче подробнее, с такими вопросами я засомневался, что тебе это нужно.
PM   Вверх
Mormishka
Дата 8.1.2011, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



У меня есть класс X. Я хочу создать n*m объектов класса X. Причем каждому объекту соответствует число x,y (координаты). 
Можно наверное сделать двумерный массив указателей на эти объекты. Как-то по-другому можно еще?
PM MAIL   Вверх
azesmcar
Дата 8.1.2011, 17:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Код

X* ptr = new X[m*n];

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.