C ++中new的放置形式是什么?

时间:2019-12-14 17:07:41

标签: c++

我研究了新的放置形式,但是我没有一个清楚的主意。他们说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的放置形式并不清楚,因此请提供示例代码来说明该概念和语法。

谢谢。

1 个答案:

答案 0 :(得分:1)

此代码正在使用未分配的内存。

这并不意味着它会崩溃,而更多是在“意外结果”字段中。

此代码可以,并且如果运行很长时间,可能会崩溃,一旦您的内存损坏将覆盖重要内容/访问超出进程分配的页面限制的内存。