我一直在寻找自定义分配器,并且我经常看到它们使用某种函数来分配内存。为了测试的目的,并进一步教育我的自我,我试图做一个“简单”的例子。但是,我知道如何去做一件基本的事情。 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