0

事前に割り当てられたバッファを持つコンテナクラスがあります。memset()を呼び出して、事前に割り当てられたメモリを使用してオブジェクトを作成しています。newを使用していないため、コンストラクターは呼び出されません。

これが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のコンストラクターを呼び出す任意の方法。

ご協力いただきありがとうございます。

4

1 に答える 1

3

既存のメモリ内のオブジェクトのコンストラクタを呼び出すには、placementnewを使用します。

あなたの場合、returnステートメントの直前に次の行を追加します。

new (pReturnValue) T;

To destroy the instance, call the destructor explicitly:

pReturnValue->~T();
于 2013-02-02T08:48:59.947 に答える