有这样的代码:
#include <iostream>
int main()
{
int a;
int* p = new (&a) int(2);
std::cout << a << std::endl;
// delete p; error BLOCK TYPE IS INVALID
std::cin.get();
return 0;
}
输出是:
2
为什么可以在堆栈上动态分配内存? (我认为堆是执行此操作的正确位置)。而且,为什么在这种情况下删除运算符会返回错误,但新运算符却可以工作?
这是使用放置新语法。 Placement new 根本不分配内存,而是在特定位置构造对象的一种方法。在这个例子中,内存来自堆栈。没必要。删除有问题,因为您没有新建内存。
有多种方法可以从堆栈动态分配内存(alloca),但这不是这里发生的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)