new 연산자를 재정 의하여 new 키워드를 사용할 때 수동으로 힙 공간을 할당합니다. 힙 컨테이너에 저장된 모든 것을 힙 컨테이너에 할당해야합니까?
보통의 항목 -CArray<CObject*> objects;
에 대한 포인터와 스택 할당 힙 컨테이너를 사용하여 미세 -is. 하지만 까다로운 그리고 난 내가 POD 유형을 수정할 수 있습니다 - 그건
CArray<CObject> objects;
buffers- 만들고 싶어. 그래서 자연스럽게 그들의 사용에 적합 스택에이를 할당 :
CVertex vertex;
objects.push_back(vertex);
그러나 힙을 손상 (I 그 나쁜 주 중 하나를 했어)과 미친 오류 제공 :
0xC0000017: Not Enough Quota.
을
배열 객체를 미리 할당 한 다음 내부적으로 = 연산자를 push_back()에 사용합니다.
임시 객체를 힙에 할당 한 다음 배열에 추가하여 문제를 해결했습니다. 그러나 그것은 옳은 것처럼 보이지 않으며, 나는 그것을 얻지 못합니다. 요청으로
, 일부 코드 : 나는에서 올바른 항목을 찾는 (버퍼 요소의 이진 검색에서 이러한 개체를 사용하고 같은 힙 모든 작품 CVertex 년대를 할당하는 것이
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
}
주 주어진 꼭지점을위한 인덱스 버퍼) 그리고 완벽하게 좋은 메쉬를 만듭니다!
어떻게 연산자를 스택에 할당 할 수 = 그들과 함수를 통해 살기를 기대합니까? 그들이 존재한다면, 그 범위를 떠나 자마자 죽을 것이고 매달린 참조로 당신을 떠날 것입니다. 또는 나는 무엇인가를 오해 했느냐? – zneak
안녕하세요, 그들은 생성자가 미리 할당 된 다음, = 연산자는 범위 밖으로 나가기 전에 스택 인스턴스에서 필드를 복사합니다. – Sorlaize
'operator new'와'CArray :: push_back' 버전에 코드를 게시 할 수 있습니까 –