Я переопределяю новый оператор, чтобы вручную выделять пространство кучи при использовании нового ключевого слова.
Обычно используется выделенный стеком контейнер с кучей с указателями на его элементы-
CArray<CObject*> objects;
- хорошо. но я привередлива и хочу сделать буферы-
CArray<CObject> objects;
- это позволяет мне изменять типы POD. Итак, я размещаю их в стеке, который естественно подходит для их использования:
CVertex vertex;
objects.push_back(vertex);
Но это портит кучу (у меня была одна из тех плохих недель) и выдает сумасшедшую ошибку:
0xC0000017: Not Enough Quota.
Я предварительно выделяю объекты массива, а затем использую оператор = внутри push_back () .
Я решил проблему, разместив временные объекты в куче, а затем добавив их в массив. Но это кажется неправильным, и я просто не понимаю.
По запросу, некоторый код:
CArray::push_back( T& newElement )
{
m_internalElements[allocatedSize] = newElement;
allocatedSize++;
}
CArray::preallocate_and_initialize( size_t itemCount )
{
T* newInternalElements = mem::allocate_and_initialize( T, itemCount );
//copy over
}
Обратите внимание, что все это работает с выделенной кучей CVertex , так как я использую эти объекты в двоичном поиске элементов буфера (поиск нужного элемента в буфере индекса для данной вершины), и это отлично строит сетку!