我刚刚了解了名为“placement new”的 C++ 构造。它允许您精确控制指针在内存中指向的位置。它看起来像这样:
#include <new> // Must #include this to use "placement new"
#include "Fred.h" // Declaration of class Fred
void someCode()
{
char memory[sizeof(Fred)];
void* place = memory;
Fred* f = new(place) Fred(); // Create a pointer to a Fred(),
// stored at "place"
// The pointers f and place will be equal
...
}
(来自 C++ FAQ Lite 的示例)
在本例中,Fred 的 this
指针将等于 place
。
我已经看到它在我们团队的代码中使用过一两次。根据您的经验,这种结构能带来什么?其他指针语言有类似的结构吗?对我来说,这似乎让人想起 FORTRAN 中的 equivalence
,它允许不同的变量在内存中占据相同的位置。
最佳答案
它允许您进行自己的内存管理。通常,这最多只会让您的性能略有提高,但有时这是一个巨大的胜利。例如,如果您的程序使用大量标准大小的对象,您可能希望创建一个分配大量内存的池。
这种事情也在 C 中完成,但由于 C 中没有构造函数,因此不需要任何语言支持。
关于c++ - C++ 构造 "placement new"的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/362953/