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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Undisputed
163 / 94 / 19
Регистрация: 10.06.2014
Сообщений: 1,353
Завершенные тесты: 3
#1

Создание объектов в заранее выделенной памяти - C++

07.12.2016, 14:08. Просмотров 547. Ответов 30
Метки нет (Все метки)

Как можно создать объекты в заранее выделенной памяти?
Цель:
1. Не запрашивать память динамически когда нужно создать новый долгоживущий объект
2. При освобождении памяти нужно что бы память освобождалась в заранее выделенном буфере и новый объект смог её занять

В данный момент нашел такую реализацию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
class Dog
{
    public:
    Dog(std::string dog_name, int dog_age)
    {
        name = dog_name;
        age = dog_age;
    }
    std::string name;
    int age;
};
 
int main()
{
    Dog **dogs = new Dog*[50];
    Dog *d1 = new(dogs)Dog("Spike", 3);//выделяем память в Dog **dogs
    std::cout << d1->name << d1->age;
    delete d1;//освобождаем память в Dog **dogs
}
Этот код решает те проблемы которые описаны в данной теме? Какие ещё есть варианты? Может как то помощью std::allocator?
Есть ли скрытые ошибки в коде?

Добавлено через 5 минут
Если создать второй объект до удаления первого, он разместится вторым в этом массиве или может перенакрыть первый?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2016, 14:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание объектов в заранее выделенной памяти (C++):

Почему в данном случае работа с заранее выделенной памятью медленнее чем с динамической? - C++
Написал функцию которая на основе списка выделяет память и при каждом вызове возвращает указатель на следующий элемент для объекта. Код...

Удаление выделенной памяти - C++
есть такой класс: выделяю память под element *ptemp = new element; и iris *temp = new iris; нужно ли отдельно удалять new iris?? ...

Удаление выделенной памяти - C++
#include &lt;iostream&gt; using namespace std; int main() { int localVariable = 5; int * pLocal=...

Массив: Освобождение выделенной памяти - C++
Сказали переделать код, нужно что бы память освобождалась не в отдельной функции а как то по другому так и не понял как. #include...

Выход за границу выделенной памяти - C++
Какие операции (кроме записи) за пределами выделенной памяти приводят к UB?

Корректно ли освобождение выделенной памяти? - C++
Извиняюсь, если такой вопрос уже звучал. Допустим есть такой кусок кода: struct A { int *x; } *b; void main() { b = new A;...

30
Undisputed
163 / 94 / 19
Регистрация: 10.06.2014
Сообщений: 1,353
Завершенные тесты: 3
08.12.2016, 11:51  [ТС] #31
Цитата Сообщение от DrOffset Посмотреть сообщение
В перспективе для возможности использования арифметики указателей (с void * это нельзя будет сделать).
Точно. Забыл совсем этот факт. Спасибо! Вопросов больше нет
0
08.12.2016, 11:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2016, 11:51
Привет! Вот еще темы с ответами:

Освобождение памяти, выделенной через new - C++
Я прочитал, что память динамически для строки, можно выделить к примеру узнать длину строки strlen(tex) и нужно добавить единицу для...

Мусор в памяти, выделенной динамически - C++
Есть код, выполняет разархивацию файла, закодированного LZ77. Вот его основная часть: цикл в котором проверяется каждый бит в маске и...

Динамические массивы и экстремум выделенной памяти - C++
Как работают всякие vector'ы? Выделяют память под (допустим) 100 элементов, при достижении этого числа, выделяют новый блок памяти на 200...

Как уменьшить размер выделенной памяти - C++
Доброе утро! пишет: переопределение формального параметра &quot;text&quot; :( подскажите пожалуйста как уменьшить размер выделенной памяти под...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru