我研究了新的放置形式,但是我没有一个清楚的主意。他们说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();
delete [] pt;
return 0;
}
我希望上面的代码无法运行,但是成功运行会产生以下输出:
constructor
4444
3333
65.8788
destructor
Process returned 0 (0x0) execution time : 0.106 s
Press any key to continue.
此代码如何运行?
我对new的放置形式并不清楚,因此请提供示例代码来说明该概念和语法。
谢谢。
答案 0 :(得分:1)
此代码正在使用未分配的内存。
这并不意味着它会崩溃,而更多是在“意外结果”字段中。
此代码可以,并且如果运行很长时间,可能会崩溃,一旦您的内存损坏将覆盖重要内容/访问超出进程分配的页面限制的内存。