Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Можно ли так делать?


Автор: Mormishka 7.1.2011, 18:47
Можно ли так выделять память для классов?
class elem {
}

elem *m=(elm*) new BYTE[sizeof(elem)*Count];

Автор: Dem_max 7.1.2011, 19:13
можно

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

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

BYTE m[sizeof(elem)*Count];

так нельзя.

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

Автор: Mormishka 7.1.2011, 19:33
[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]

Автор: azesmcar 7.1.2011, 19:35
Цитата(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;
}


Автор: Mormishka 8.1.2011, 09:16
Что это значит?
Код

X() : i(10) {};

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

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

Это инициализация члена класса i значением 10.
Расскажи о задаче подробнее, с такими вопросами я засомневался, что тебе это нужно.

Автор: Mormishka 8.1.2011, 16:03
У меня есть класс X. Я хочу создать n*m объектов класса X. Причем каждому объекту соответствует число x,y (координаты). 
Можно наверное сделать двумерный массив указателей на эти объекты. Как-то по-другому можно еще?

Автор: azesmcar 8.1.2011, 17:39
Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)