在挖掘C++项目时,我遇到了C++ new运算符的奇怪用法:
int arr[5];
ClassA* a = new(arr) ClassA();
Run Code Online (Sandbox Code Playgroud)
你能帮我理解这个语法吗?
这是放置新语法 - 它允许您在内存中指向的位置构造一个对象。考虑 new 的“正常”使用:
X *p = new X;
...
delete p;
Run Code Online (Sandbox Code Playgroud)
您可以通过执行以下操作来达到相同的效果:
#include <new>
...
void *buffer = ::operator new(sizeof(X));
X *p = new (buffer) X;
...
p->~X();
::operator delete(buffer);
Run Code Online (Sandbox Code Playgroud)
后者分配足够的内存来容纳 an (不在其中X构造 an ),然后在分配的内存中显式构造 an。随后,它显式地销毁它所创建的内存,然后释放包含它的内存。XXX
另请参阅 C++ 常见问题解答:http://www.parashift.com/c++-faq/placement-new.html
| 归档时间: |
|
| 查看次数: |
722 次 |
| 最近记录: |