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


Автор: sysil 12.11.2007, 14:05
Подскажите можно ли создать динамический массив объектов, которые содержат конструктор с параметрами. При создании объекта нужно передать параметры конструктора. Получается что при создании дин массива нужно передать дин массив параметров. Верно ли я мыслю? Если так то как ето сделать.
Спасибо.
Есть и деструктор с параметрами.

Автор: Fazil6 12.11.2007, 14:29
Цитата(sysil @  12.11.2007,  14:05 Найти цитируемый пост)
Подскажите можно ли создать динамический массив объектов, которые содержат конструктор с параметрами. При создании объекта нужно передать параметры конструктора. Получается что при создании дин массива нужно передать дин массив параметров. Верно ли я мыслю?

неверно.
для использования new[] нужен конструктор поумолчанию.

выход:
1. Добавить конструктор поумолчанию. Выделить память и потом заменить в нем объекты построенными конструктором с параметрами
либо
2. Сделать все параметры конструктора параметрами поумолчанию
Код

struct A
{
A(int x = 0);
};


а лучше dcuj std::vector , но ему по любому также нужны конструктор поумолчанию и копии

Добавлено через 18 секунд
Цитата(sysil @  12.11.2007,  14:05 Найти цитируемый пост)
Есть и деструктор с параметрами.

чиво???

Автор: Lazin 12.11.2007, 14:35
Используй массив указателей, или boost::ptr_vector, он специально для этого предназначен

Автор: EnergoHokum 12.11.2007, 14:38
GCC слопал такой вариант:
Код

#include <stdio.h>

struct MyObject
{
    int i; long l;
    MyObject() { ; }
    MyObject(int ii,long ll) { i=ii; l=ll; }
};

int main(int argc,char** argv)
{
    MyObject* pmo=new MyObject[50];
    for(int i=0;i < 50;i++)
    {
        pmo[i].i=i; pmo[i].l=i;
    }
    delete[] pmo;
    return 0;
}

(Ну, это совсем в лоб получилось...)

Автор: AntonSaburov 12.11.2007, 14:39
Думаю, что лучше использовать библиотеку STL - списки, коллекции и прочая. Имнно для такого и предназначено.

Автор: UnrealMan 12.11.2007, 18:41
Цитата(Fazil6 @  12.11.2007,  14:29 Найти цитируемый пост)
std::vector , но ему по любому также нужны конструктор поумолчанию 

Разве?

Автор: Fazil6 12.11.2007, 18:56
Цитата(UnrealMan @  12.11.2007,  18:41 Найти цитируемый пост)
Разве?

ну хорошо, не всегда, но может понадобиться

Автор: UnrealMan 12.11.2007, 19:04
Даже resize без него можно вызвать.

Автор: Fazil6 12.11.2007, 19:16
Цитата(UnrealMan @  12.11.2007,  19:04 Найти цитируемый пост)
Даже resize без него можно вызвать.

уговорил.
vector может обходиться без конструктора поумолчению 

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