私はカスタムアロケータを調べていましたが、何らかの種類の関数を使ってメモリを割り当てることがよくあります。テスト目的のために、私の自己をさらに教育するために、私はそうする簡単な例を作りました。しかし、私のやり方について理解している基本的なことが1つあります。 malloc
とnew
の主な違いの1つは、newを使用するとコンストラクタが呼び出されることです。基本的にnew
を置き換える独自のアロケータを作成したい場合は、malloc
を使用するときにコンストラクタを呼び出す方法を教えてください。カスタムアロケータを使ってオブジェクトのコンストラクタ/デストラクタを呼び出す
私は、クラスではクラスのためにnew
とdelete
をオーバーロードできることを理解していますので、質問の大きな部分は、new
はどのように割り当て中にオブジェクトコンストラクタを呼び出していますか?同様に、私はdelete
がデストラクタを呼び出す方法に興味があります。
割り当て中にSomeClass
コンストラクタが呼び出されることを期待していたサンプルテストコードを作成しましたが、表示されません。
#include <malloc.h>
void* SomeAllocationFunction(size_t size) {
return malloc(size);
}
class SomeClass
{
public:
SomeClass() {
int con = 1000;
}
~SomeClass() {
int des = 80;
}
};
int main(void){
SomeClass* t = (SomeClass*)SomeAllocationFunction(sizeof(SomeClass));
return 0;
}
(注意点として、私はちょうどnew
を使用することができます。しかし、私はちょうどnew
またはplacement new
を呼び出さないカスタムアロケータを作成しようとしています学習の目的のために知っています)。
もし私が使用する必要があるプレースメントが新しい場合、MSVCの' new'はnew.cppのバージョンで新しいプレースメントを呼び出しません(new.cppでは新しい呼び出しを行うことでそれを得ることができます)。 – mmurphy
@mmurphy:*概ね*と似ていますが、確かに同じではありません。 –