Форум программистов, компьютерный форум, киберфорум
Наши страницы

Динамическая память и конструктор класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Освобождение памяти http://www.cyberforum.ru/cpp-beginners/thread1158457.html
Маленький вопросик, как правильно освобождать память выделенную под vector<...>, деструктором ~vector() или методом clear() ?
C++ Map stl c++ ссылка на неразрешенный внешний символ Уважаемые форумчане, столкнулся с проблемой вставки объекта класса как параметр в контейнер map. Привожу ниже код как пытался сделать. Компилятор использую visual studio 2012. При построении проекта... http://www.cyberforum.ru/cpp-beginners/thread1158454.html
Карточная игра C++
Решил попробовать сделать игру "дурак" в консоли windows. То есть сперва без имитации "интеллекта" машиной, хотя бы чтобы можно было ходить за обоих игроков и выяснять кто победил. Я не видел...
C++ Как работает функция вывода элементов списка?
Ребят, объясните в кратце, как работает функция вывода элементов списка(любая), например такая. и если кто знает, дайте ссылочку(литературу) на расшириное описание списков(стеков и очереди)void...
C++ Реализовать алгоритм, вычисляющий N членов ряда Фибоначчи с i-ого по k-й включительно http://www.cyberforum.ru/cpp-beginners/thread1158431.html
Реализовать алгоритм, вычисляющий N членов ряда Фибоначчи с i-ого по k-й включительно. Вычисления прекращаются досрочно , если сумма вычисленных элементов превысит заранее заданное значение. СИ...
C++ Как создаются оконные приложения Всем Привет! Вопрос следующий:Хочу научится писать оконные приложения, с гуи ну и т.д.До этого писал такие с opengl, но возможно ли самому(без помощи opengl) создавать окна,например Windows Forms,и... подробнее

Показать сообщение отдельно
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
27.04.2014, 00:09
Цитата Сообщение от lion_wine Посмотреть сообщение
если убрать [n+1] все компилируется, например, для создания временного контейнера (уже опробовано).
Да. Для создания отдельных объектов - работает, для массивов - нет.
Цитата Сообщение от lion_wine Посмотреть сообщение
А как можно, тогда обойти, не запуская конструктор по умолчанию?
Как вариант, использовать вектор:
C++
1
std::vector<Marshroute> objects2(n + 1, Marshroute(for_loop));
В GCC есть расширение, которое позволяет запись из твоего первого поста. Но код потеряет переносимость.

Еще можно определить собственную функцию создания массивов с конструкторами (код С++11):
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
template <typename T, typename ...Args>
T * alloc_array(size_t count, Args... args)
{
    if(void * pRaw = std::malloc(sizeof(size_t) + sizeof(T) * count))
    {
        std::memcpy(pRaw, &count, sizeof(size_t));
        T * pArr = reinterpret_cast<T*>(static_cast<char *>(pRaw) + sizeof(size_t));
        for(size_t i = 0; i < count; ++i)
        {
            ::new(pArr + i) T(args...);
        }
        return pArr;
    }
    throw std::bad_alloc();
}
 
template <typename T>
void delete_array(T * pArr)
{
    if(pArr != nullptr)
    {
        void * pRaw  = reinterpret_cast<char*>(pArr) - sizeof(size_t);
        size_t count;
        std::memcpy(&count, pRaw, sizeof(size_t));
        for(int i = count - 1; i >= 0; --i)
        {
            (pArr + i)->~T();
        }
        std::free(pRaw);
    }
}
 
int main(int argc, char *argv[])
{
    Test * p = alloc_array<Test>(1, 5);
 
    delete_array(p);
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru