일반적인 클래스나 자료형은 지금까지 했던 Allocator를 이용하여 메모리를 할당하고 해제할 수 있었다. 메모리 오염 또한 방지할 수 있었는데 벡터나 맵 등 다른 자료구조에 대해서는 아직 내부적으로 new, delete를 사용하고 있을 것이다. 이번에는 이를 한 번 수정해보자.
벡터 클래스의 선언부를 보면 타입과 Allocator를 지정할 수 있다.
vector<int32, StlAllocator<int32>> v;
이런식으로 사용할 수 있다는 뜻이다!!!
하지만 매번 위와 같이 지정할 수는 없으므로 헤더파일을 하나 만들어보자.
Container.h
#pragma once
#include "Types.h"
#include "Allocator.h"
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
using namespace std;
template<typename Type>
using Vector = vector<Type, StlAllocator<Type>>;
template<typename Type>
using List = list<Type, StlAllocator<Type>>;
template<typename Key, typename Type, typename Pred = less<Key>>
using Map = map<Key, Type, Pred, StlAllocator<pair<const Key, Type>>>;
template<typename Key, typename Pred = less<Key>>
using Set = set<Key, Pred, StlAllocator<Key>>;
template<typename Type>
using Deque = deque<Type, StlAllocator<Type>>;
template<typename Type, typename Container = Deque<Type>>
using Queue = queue<Type, Container>;
template<typename Type, typename Container = Deque<Type>>
using Stack = stack<Type, Container>;
template<typename Type, typename Container = Vector<Type>, typename Pred = less<typename Container::value_type>>
using PriorityQueue = priority_queue<Type, Container, Pred>;
using String = basic_string<char, char_traits<char>, StlAllocator<char>>;
using WString = basic_string<wchar_t, char_traits<wchar_t>, StlAllocator<wchar_t>>;
template<typename Key, typename Type, typename Hasher = hash<Key>, typename KeyEq = equal_to<Key>>
using HashMap = unordered_map<Key, Type, Hasher, KeyEq, StlAllocator<pair<const Key, Type>>>;
template<typename Key, typename Hasher = hash<Key>, typename KeyEq = equal_to<Key>>
using HashSet = unordered_set<Key, Hasher, KeyEq, StlAllocator<Key>>;
자주 사용하는 자료구조들을 using 키워드를 통해 재정의했다. 이제 직접 설정한 키워드로 해당 자료구조를 사용할 수 있다. 만약 더 필요한 것들이 있다면 그 자료구조의 포멧에 맞춰 추가하면 된다.
'서버 > 메모리 관리' 카테고리의 다른 글
7. Memory Pool #2 (0) | 2024.08.23 |
---|---|
6. Memory Pool #1 (0) | 2024.08.20 |
4. Stomp Allocator (0) | 2024.08.16 |
3. Allocator (0) | 2024.08.11 |
2. 스마트포인터 (0) | 2024.08.11 |