2013-02-02 5 views
0

미리 할당 된 버퍼가있는 컨테이너 클래스가 있습니다. 미리 할당 된 메모리를 사용하여 객체를 만드는 memset()을 호출합니다. new를 사용하지 않기 때문에 생성자는 호출되지 않습니다.템플릿 클래스의 생성자를 호출합니다.

다음은 템플릿 클래스 T. 도와

감사의 생성자를 호출 할 수있는 방법 추가 기능

template<typename T> 
T* CContainer<T>::Add() 
{ 
memset(&m_pBuffer[index],0,index); 
T* pReturnValue = reinterpret_cast<T*> (&m_pBuffer[index]); 

return pReturnValue; 
} 

의 단순화 된 버전입니다.

+1

사용 "새로운 배치를". [이] (http://stackoverflow.com/questions/222557/what-uses-are-there-for-placement-new) 좋은 설명이 있습니다. –

답변

3

기존 메모리 조각에서 개체의 생성자를 호출하려면 placement new을 사용하십시오. 귀하의 경우에는

바로 반환 문 앞에 줄을 추가

new (pReturnValue) T; 

명시 적으로 소멸자, 인스턴스를 파괴 호출하려면 :

pReturnValue->~T(); 
+0

감사합니다 얘들 아, 개체를 제거하고 메모리를 재 지정할 때 소멸자를 호출하는 방법이 있습니까? – Codesmith

+0

@Codesmith : 소멸자 호출 편집을 추가했습니다. 이 게시물을 받아 들일 수 있다면, 질문에 대한 답변으로 표시하십시오. –

관련 문제