Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2017, 15:36   #1
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию Реализация PoolAllocator

Мне нужно написать свой PoolAllocator. Я написал, но я не знаю правильно ли я сделал. Если можете посмотрите и скажите что не так млм все так
Код:
template <typename T>
class PoolAllocator
{
public:
	PoolAllocator(std::size_t maxNumObjects)
		: mMaxNumObjects(maxNumObjects)
		, mAvaialableObjects[mMaxNumObjects]
		, mObjectsInUse[nullptr]

	{
	}
	PoolAllocator(const PoolAllocator&) = delete;
	PoolAllocator& operator= (const PoolAllocator&) = delete;
	~PoolAllocator()
	{

		assert(mAvaialableObjects == mObjectsInUse);
		delete[] mAvaialableObjects;
		delete[] mObjectsInUse;
	}

	T* Allocate()
	{
		
		mAvaialableObjects -= 1;
		mObjectsInUse += 1;

		if (mAvaibleObjects == 0)
			return nullptr;
	}
	void Deallocate(T* pAddress)
	{
		mAvaialableObjects += 1;
		mObjectsInUse -= 1;
		
		pAddress = mObjectsInUse;
		return pAddress;
	}

private:
	std::size_t mMaxNumObjects;
	std::vector<T*> mAvaialableObjects;
	std::vector<T*> mObjectsInUse;
};
dimaSlon вне форума Ответить с цитированием
Старый 25.11.2017, 15:59   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от dimaSlon Посмотреть сообщение
я не знаю правильно ли я сделал
Нет, не правильно


Цитата:
Сообщение от dimaSlon Посмотреть сообщение
скажите что не так
Ну, начнем с того, что это даже не скомпилируется.
А так навскидку:
Два счетчика - это лишнее.
Функция выделения ничего не возвращает и не выделяет.
Функция освобождения пытается вернуть указатель.
Переменные класса не инициализированы.
waleri вне форума Ответить с цитированием
Старый 25.11.2017, 16:00   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
но я не знаю правильно ли я сделал
Берет любой контейнер из стандартной либы, передаете ему в качестве параметра свой аллокатор и делаете несколько типичных задач с ним. Если все работает, то есть шанс, что ваш аллокатор работает.
p51x вне форума Ответить с цитированием
Старый 25.11.2017, 22:39   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от dimaSlon Посмотреть сообщение
Мне нужно написать свой PoolAllocator. Я написал, но я не знаю правильно ли я сделал. Если можете посмотрите и скажите что не так
функция T* Allocate()
бессмысленная.
и содержит UB

функция void Deallocate(T* pAddress)
вообще не скомпилируется.
и содержит бред


общее впечатление:
человек который это сотворил не знает элементарных основ.

и не понятно, о чем он думал, когда делал,
сам не понимая что творит.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация БД chocolat БД в Delphi 2 24.11.2012 12:15
реализация в QT navolo4ka Qt и кроссплатформенное программирование С/С++ 0 10.02.2012 15:39
Реализация навигации по БД Дмитрий1993 Общие вопросы Delphi 4 15.02.2011 10:16
Реализация stopvirus Общие вопросы Delphi 12 24.12.2010 19:44
Реализация Стека MjRed Общие вопросы C/C++ 3 13.05.2009 12:18