Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 101

Выделить память под массив классов заранее

27.11.2017, 12:34. Показов 5900. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли скажем так выделить память под массив классов с участием конструктора с параметрами для каждого элемента этого массива в цикле без потери времени
я думал сначала по конструктору по умолчанию а потом вызывать для каждого.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2017, 12:34
Ответы с готовыми решениями:

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection { public: pk *field; ...

Динамически выделить память под массив
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...

Выделить память под массив размера 2^64 байтов
Требуется выделить память под массив размера 2^64 байтов. Как порекомендуете решать данную задачу?

46
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
29.11.2017, 10:22
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Эта запись создает объекты и вызывает конструктор по умолчанию.
ну можно malloc|calloc|или new char[size]. Суть уловили я думаю?)
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
29.11.2017, 10:25
Valeryn, не уловил. Показывайте рабочий вариант.
0
77 / 50 / 16
Регистрация: 17.05.2015
Сообщений: 262
30.11.2017, 13:06
Цитата Сообщение от Valeryn Посмотреть сообщение
ну можно malloc|calloc|или new char[size]. Суть уловили я думаю?)
C++
1
2
3
4
Object *objects = (Object*)malloc(sizeof(Object) * 10);
for (int i = 0; i < 10; ++i) {
    new(objects + i) Object(args...);
}
C++
1
2
3
4
Object *objects = (Object *)(new char[sizeof(Object) * 10]);
for (int i = 0; i < 10; ++i) {
    new(objects + i) Object(args...);
}
Любым способом выделяем память а потом уже вызывает конструктор оператором new(void*) T(Args...).
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.11.2017, 13:09
А в конце не забываем вызвать все деструкторы и сделать удаление преобразованного в исходный тип массива
C++
1
2
3
4
for (int i = 0; i < 10; ++i) {
    objects[i].~objects();
}
delete[] ((char *)objects);
Хотя вместо си-шного приведения можно воспользоваться reinterpret_cast<>
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
30.11.2017, 15:19
Valeryn, способ рабочий, подобный способу TRam_

Однако не думаю, что он лучше, чем обычное использование массивов указателей.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
30.11.2017, 15:28
QuakerRUS, разве что вызов одного new будет быстрее, чем вызов N раз new. Но не знаю случаев, когда бы приходилось удалять/создавать массивы объектов настолько часто, что частоту вызовов new приходилось бы учитывать.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
01.12.2017, 11:52
TRam_, для бОльших объемов мой алгоритм работает быстрее (по крайней мере у меня). Например, если с класса убрать динамический массив и значительно уменьшить N, ваши алгоритмы будут быстрее. Так же, если скомпилировать на x64 архитектуре, мой алгоритм работает еще быстрее. Проверял на VS2017.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <time.h>
 
using namespace std;
 
class MyClass
{
public:
    MyClass(int d)
        : data(d)
    {
        ptr = new int[100];
    }
    ~MyClass()
    {
        delete[] ptr;
    }
 
private:
    int data;
    int* ptr;
};
 
const int N = 1000;
int timeStamp, counter;
 
void quaker()
{
    counter = 0;
 
    while (timeStamp == time(NULL))
    {
        MyClass **m = new MyClass* [N];
 
        for (int i = 0; i < 10; i++)
            m[i] = new MyClass(i);
 
        for (int i = 0; i < 10; i++)
            delete m[i];
 
        delete[] m;
        counter++;
    }
 
    cout << "quaker: " << counter << endl;
}
 
void tram_()
{
    counter = 0;
 
    while (timeStamp == time(NULL))
    {
        char *objects_mem = new char[sizeof(MyClass) * N];
 
        MyClass *m = reinterpret_cast<MyClass *>(objects_mem);
 
        for (int i = 0; i < N; ++i)
            new(m + i) MyClass(i);
 
        for (int i = 0; i < N; ++i)
            m[i].~MyClass();
 
        delete[] reinterpret_cast<char *>(m);
        counter++;
    }
 
    cout << "tram_: " << counter << endl;
}
 
void valeryn()
{
    counter = 0;
 
    while (timeStamp == time(NULL))
    {
        MyClass *m = (MyClass *)(new char[sizeof(MyClass) * N]);
 
        for (int i = 0; i < N; ++i)
            new(m + i) MyClass(i);
        
        for (int i = 0; i < N; ++i)
            m[i].~MyClass();
 
        delete[] (char *)m;
        counter++;
    }
 
    cout << "valeryn: " << counter << endl;
}
 
int main()
{
    while (1)
    {
        timeStamp = time(NULL);
        while (timeStamp == time(NULL));
        timeStamp = time(NULL);
        quaker();
 
        timeStamp = time(NULL);
        while (timeStamp == time(NULL));
        timeStamp = time(NULL);
        tram_();
 
        timeStamp = time(NULL);
        while (timeStamp == time(NULL));
        timeStamp = time(NULL);
        valeryn();
    }
 
    system("pause");
    return 0;
}
Добавлено через 18 часов 54 минуты
TRam_, пардон, в моем алгоритме закралась досадная ошибка. Ваши алгоритмы работают значительно быстрее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2017, 11:52

Динамически выделить память под массив функций
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray&amp; ,const QByteArray&amp;); как сделать тоже самое только через new? как правильно...

Выделить память под массив неизвестной длины
для программы нужен массив int Array т.е. длину строки я знаю, а сколько строк у меня будет - не представляю. я знаю, что...

Выделить память под динамический массив указателей
Нужно выделить память вот под такое дело. Для примера n=5 . Ничего нагуглить так и не смог :( что есть : #include &quot;stdafx.h&quot;...

Выделить и удалить память под 4 мерный массив
пацаны помогите.. Добавлено через 1 час 11 минут .помогите..не могу вобще натйи 4 мерные масивы..только 2хмерные

Как выделить память под массив в структуре?
Здравствуйте , воnрос конечно глуnый , но голову я сижу ломаю долго , есть Структура , в ней есть массив , как nод этот массив выделить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
47
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru