我有一个容器类,它有一个预先分配的缓冲区。我正在调用memset()来使用预先分配的内存来创建我的对象。由于我没有使用new,因此不会调用构造函数。
以下是添加功能
的简化版本 template<typename T>
T* CContainer<T>::Add()
{
memset(&m_pBuffer[index],0,index);
T* pReturnValue = reinterpret_cast<T*> ( &m_pBuffer[index] );
return pReturnValue;
}
以任何方式调用模板类T的构造函数。
感谢您的帮助。
答案 0 :(得分:3)
要在现有内存中调用对象的构造函数,请使用placement new。
在你的情况下,在return语句之前添加这一行:
new (pReturnValue) T;
要销毁实例,请显式调用析构函数:
pReturnValue->~T();