C++ 中“placement new”有哪些用途?


在本节中,我们将了解 C++ 中的 placement new 运算符。placement new 是 new 运算符的另一种变体。常规 new 运算符执行两件事。它分配内存,然后在分配的内存中构造一个对象。

new 运算符在堆部分中分配内存并在其中构造对象。但是对于 placement new 运算符,它会在给定的地址处构造对象。要释放内存,如果使用 new 运算符分配内存,我们可以使用 delete 关键字。但是对于 placement new,没有 placement delete 特性。

因此,简而言之,placement new 允许您“构造”一个对象,该对象已分配给给定变量的内存。这对于优化很有用,因为它比重新分配和重复使用已分配给它的同一内存更快。它可以按如下方式使用

new (address) (type) initializer

我们可以指定一个地址,希望在此地址处构造给定类型的一个新对象。例如。

示例代码

 现场演示

#include<iostream>
using namespace std;
int main() {
   int a = 5;
   cout << "a = " << a << endl;
   cout << "&a = " << &a << endl;
   // Placement new changes the value of X to 100
   int *m = new (&a) int(10);
   cout << "\nAfter using placement new:" << endl;
   cout << "a = " << a << endl;
   cout << "m = " << m << endl;
   cout << "&a = " << &a << endl;
   return 0;
}

输出

a = 5
&a = 0x22fe34
After using placement new:
a = 10
m = 0x22fe34
&a = 0x22fe34

更新于:2019 年 7 月 30 日

145 次浏览

开启你的职业生涯

完成课程获得认证

开始
广告