我研究过新的放置形式,但我没有弄清楚。他们说 new 的放置形式允许你从已经分配的内存中创建一个对象。但是看下面的代码。
#include <iostream>
using namespace std;
class ex
{
public:
int x;
int y;
double z;
ex()
{
cout<<"constructor";
}
~ex()
{
cout<<"destructor";
}
};
int main()
{
char *pt=new char;
ex *p;
p=new(pt) ex();
p->x=4444;
p->y=3333;
p->z=65.87879898;
cout<<"\n"<<p->x<<"\n"<<p->y<<"\n"<<p->z<<"\n";
p->~ex();
free(pt);
return 0;
}
我预计上面的代码无法运行,但它成功运行产生了以下输出:
constructor
4444
3333
65.8788
destructor
Process returned 0 (0x0) execution time : 0.106 s
Press any key to continue.
这段代码如何运行?
我不清楚 new 的放置形式,所以请任何人用示例代码解释这个概念和语法。请任何人。
谢谢。
最佳答案
此代码正在使用未分配的内存。
这并不意味着它必须崩溃,更多的是在“意外结果”领域。
这段代码可以而且很可能会崩溃,如果运行很长时间,一旦你的内存损坏将覆盖一些重要的东西/访问进程分配的页面限制之外的内存。
关于c++ - 如果我在 C++ 中以 new 的放置形式使用的内存不足会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59337322/