我一直在尋找自定義分配器,並且我經常看到它們使用某種函數來分配內存。爲了測試的目的,並進一步教育我的自我,我試圖做一個「簡單」的例子。但是,我知道如何去做一件基本的事情。 malloc
與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
)。
如果placement new是我需要使用的,那麼爲什麼例如MSVC的'new'不會在其new'版本中調用放置new(在new.cpp中,您可以通過進入一個新調用來獲取它)。 – mmurphy 2012-04-18 03:03:30
@mmurphy:*粗略*相似,絕對不相同。 – 2012-04-18 04:54:02