2013-02-02 251 views
0

我有一個具有預分配緩衝區的容器類。我調用memset()來使用預先分配的內存來創建我的對象。由於我沒有使用新的構造函數,因此不會調用它。調用模板類的構造函數

這裏是add函數

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

return pReturnValue; 
} 

的簡化版本的任何方法來調用模板類T.

感謝您的幫助的構造。

+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:爲析構函數調用添加了編輯。如果你覺得這篇文章可以接受,請將其標記爲對你的問題無關緊要。 –

相關問題