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

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

Восстановить пароль Регистрация
 
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
11.06.2013, 16:13     Исправить и дополнить распределитель памяти #1
Добрый день.
Изучаю книгу Страуструпа (ту, что для новичков). Там есть задание создать упрощённый вариант класса 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++ Перегрузка, выделение памяти, помогите исправить
Исправить ошибки ( распределение памяти ) C++
C++ Распределитель памяти идентичный std::allocator. Непонятные синтаксис и концепция std::allocator::construct
нужно дополнить - исправить код C++
Дополнить код C++
Работа со стеком. Исправить функцию удаления памяти C++

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

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

Текущее время: 12:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru