Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тонкости С++
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
oran-be
Такой вопрос - есть объект в виде задекларированного класса. Необходимо иметь массив такого типа объектов. Как правильно сконструировать массив?
есть подозрение, что опрерация
OBJECT* pObject = (OBJECT*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(OBJECT)*SIZE_AREA_OBJECTS);
приведет лишь к конструированию только первого объекта и последующий вызов

pObject[2]->ObjectFunction(a, b, c);
приведет к сбою программы.

Так же и оператор new. Кто то знает подробно?
Degun
Цитата(oran-be @ Nov 12 2007, 15:06) *
Такой вопрос - есть объект в виде задекларированного класса. Необходимо иметь массив такого типа объектов. Как правильно сконструировать массив?
есть подозрение, что опрерация
OBJECT* pObject = (OBJECT*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(OBJECT)*SIZE_AREA_OBJECTS);
приведет лишь к конструированию только первого объекта и последующий вызов

pObject[2]->ObjectFunction(a, b, c);
приведет к сбою программы.

Так же и оператор new. Кто то знает подробно?

Лучше сначала выделить массив под указатели на объекты класса, а затем в цикле выделить необходимое кол-во объектов и сохранить указатели в массиве. По завершению необходимо не забыть освободить как все объекты класса, так и массив указателей.
dxp
Цитата(oran-be @ Nov 12 2007, 18:06) *
Такой вопрос - есть объект в виде задекларированного класса. Необходимо иметь массив такого типа объектов. Как правильно сконструировать массив?
есть подозрение, что опрерация
OBJECT* pObject = (OBJECT*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(OBJECT)*SIZE_AREA_OBJECTS);
приведет лишь к конструированию только первого объекта и последующий вызов

pObject[2]->ObjectFunction(a, b, c);
приведет к сбою программы.

Так же и оператор new. Кто то знает подробно?

Код
class TSlon { ... };

TSlon *p = new TSlon[10];

...

delete[] p;

Будет создан массив объектов. Естественно, каждый объект будет создан с помощью конструктора, как обычно.
oran-be
Спасибо за помосчь, даже несмотря на то, чтоя, похоже не втой ветке тему открыл. smile.gif
Juggernaught
Ни HeapAlloc, ни malloc, ни calloc никакие объекты не конструируют никогда - они тупо выделяют память заданного размера. Динамически конструирует ТОЛЬКО new!
oran-be
Цитата(Juggernaught @ Nov 21 2007, 15:20) *
Ни HeapAlloc, ни malloc, ни calloc никакие объекты не конструируют никогда - они тупо выделяют память заданного размера. Динамически конструирует ТОЛЬКО new!

Спасибо за "ценное" замечание. но было бы странно требовать от С-шных функций, при условии, что С -не объектно-ориентированный язык, конструирования объектов.
Oldring
Цитата(oran-be @ Nov 21 2007, 17:56) *
Спасибо за "ценное" замечание. но было бы странно требовать от С-шных функций, при условии, что С -не объектно-ориентированный язык, конструирования объектов.


Хм... Странно, конечно, но разве не именно вы написали про конструирование плюсового объекта сишной функцией в своем самом первом посте?
oran-be
Цитата(Oldring @ Nov 21 2007, 19:10) *
Хм... Странно, конечно, но разве не именно вы написали про конструирование плюсового объекта сишной функцией в своем самом первом посте?

Я как раз и выразил сомнение по этому поводу. Я просто не знал, как правильно воспользоватся опрератором new для создания массива объектов, кроме как создать цикл по конструированию объектов, что было бы несколько неэлегантно.
Juggernaught
Цитата
есть подозрение, что опрерацияOBJECT* pObject = (OBJECT*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(OBJECT)*SIZE_AREA_OBJECTS);приведет лишь к конструированию только первого объекта и последующий вызов


Так вот "ценность" замечания как раз в том что конструирования даже первого объекта не произойдет.
oran-be
Цитата(Juggernaught @ Nov 22 2007, 19:06) *
Так вот "ценность" замечания как раз в том что конструирования даже первого объекта не произойдет.

Вы буите удивлены, но происходит. Приведение указателя вызывает конструктор.
alexander55
Цитата(oran-be @ Nov 27 2007, 09:45) *
Вы буите удивлены, но происходит. Приведение указателя вызывает конструктор.

Для прояснения вопроса.
http://electronix.ru/forum/index.php?showt...6835&st=22#
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.