c++ - C++ 构造 "placement new"的用途是什么?

标签 c++ memory new-operator placement-new equivalence

我刚刚了解了名为“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/

相关文章:

c++ - make_shared 与自定义新运算符

c++ - 使用epoll_wait时如何正确读取数据

c++ - 如何创建不依赖于 C 运行时的 Win32 DLL

memory - 与 Java 7 相比,运行相同递归代码的相同线程在 Java 8 中似乎消耗更多的堆栈内存

java - 如何检查数组是否可以分配java中请求的内存大小?

Javascript动态选择构造函数,这是不正确的吗?

c++ - 编译有效,启动不是 - "standard path"?

C++编译时常量检测

scala - Scala使用惰性集合处理大型Scala数据的功能方法

c++ - C++ 的 Option/Maybe 类