Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
#1

Исправить и дополнить распределитель памяти - C++

11.06.2013, 16:13. Просмотров 363. Ответов 0
Метки нет (Все метки)

Добрый день.
Изучаю книгу Страуструпа (ту, что для новичков). Там есть задание создать упрощённый вариант класса allocator с исп. функций malloc и free.
Вот мой код:
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
//Allocator.h
#include<cstdlib>
#define allocator Allocator
 
template<class T> class Allocator {
public:
    T* allocate(int n);
    void deallocate(T* p, int n);
 
    void construct(T* p, const T& v);
    void destroy(T* p);
};
 
template<class T> 
T* Allocator<T>::allocate(int n)
{
    return static_cast<T*>(malloc(n*sizeof(T)));
}
 
template<class T>
void Allocator<T>::deallocate(T* p, int n)
{
    for (int i=0; i<n; ++i) {
        free(p);
        ++p;
    }
}
 
template<class T>
void Allocator<T>::construct(T* p, const T& v)
{
    /**p=T(v);*/
    *p=v;
}
 
template<class T>
void Allocator<T>::destroy(T* p)
{
    p->~T();
}
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
#include<iostream>
#include<string>
#include"Allocator.h"
using namespace std;
 
int main()
{
    allocator<string> alloc;
    string* ps;
 
    ps=alloc.allocate(5);
    alloc.construct(ps, string("string"));
 
    /*allocator<int> alloc;
    int* pi;
    pi=alloc.allocate(2);
    alloc.construct(pi+1,2);
 
    cout<<pi[2]<<endl;
 
    alloc.destroy(pi+2);
    alloc.deallocate(pi,2);*/
 
    cin.get();
    return 0;
}
При выполнении, к сожалению, выдаётся ошибка.
Помогите решить:
1) Как довести до ума данный код?
2) Как реализован библиотечный класс allocator: c использование malloc/free или new/delete?
3) Что нужно добавить, чтобы данный вариант не уступал по функционалу библиотечному?
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 16:13     Исправить и дополнить распределитель памяти
Посмотрите здесь:

нужно дополнить - исправить код - C++
Понимаю, что задач вроде не сложная, но никак не получается переделать код. Я решил задачу , которую выкладывал ниже, про кол-во...

Удалить в текстовом файле символ распределитель в конце строк - C++
Нужно создать програму, что будет удалять в текстовом файле символ распределитель(пробел, символ табуляции) в конце строк. Нужно...

Исправить ошибки ( распределение памяти ) - C++
Написать программу, в которой матрица размерности n x m размещается в свободной памяти. Элементы целочисленной матрицы заполняются с...

Перегрузка, выделение памяти, помогите исправить - C++
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #pragma warning(disable:4101) //--------------------------------- ...

Работа со стеком. Исправить функцию удаления памяти - C++
Нужно исправить функцию удаления стека из памяти. Когда доходим до нее, программа аварийно завершается. Также почему-то не выводит на...

Дополнить - C++
Нужно дополнить код,дописать изменился ли первый элемент Добавлено через 7 минут т.е равен ли после выполнения команды первый...

Дополнить код - C++
Добрый день, есть вот такой вот код, который позволяет ввод информации о маршрутном такси (номер, стоимость, вид транспорта), где стоимость...

Дополнить программу - C++
#include &lt;iostream&gt; class Calories { public: void Power(); void Display(); void Read(); ...

Нужно дополнить - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(){ char s ; for(int i=0; i&lt;5;i++) cin.getline(s,255); ...

Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) - C++
Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024 ячейками памяти по 8 байт каждая. т.е. за...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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