Pot*_*ter 10
Placement new只是跳过分配并在预分配的内存中构造一个对象.由于C缺少构造函数,因此无需放置新的构造函数.我认为等价物是一个指针类型转换,因为一旦你有一个指针,你就可以表现为一个对象存在.
从公共内存池中雕刻不同类型的对象的示例:
char *pool = (char *) malloc( 1000 );
char *pen = pool;
foo *obj1 = (foo *) pen;
pen += sizeof (foo);
bar *obj2 = (bar *) pen;
pen += sizeof (bar);
/* etc */
Run Code Online (Sandbox Code Playgroud)
当然,在执行此操作时,您需要负责将正确的指针传递给free并调整对齐要求 - 就像在C++中放置新内容一样.