C ++“新”运算符-使用方式?

Gea*_*phy 3 c++ new-operator

最近,我遇到了对new运算符的异常使用,以重新初始化C ++类,其代码如下:

#include <iostream>
struct Test { Test() { std::cout<<"Test Ctor\n"; }  };
int main()
{
  Test t ;
  new (&t) Test;
  return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

如果运行此代码,则会两次调用Test ctor。在这种情况下,似乎“ new”运算符正在使用指向对象的指针作为内存源,而不是分配新内存,valgrind确认没有内存泄漏。

有人可以阐明“新”运算符的用法吗?

qdi*_*dii 5

此运算符称为“新放置”。它在给定的地址上运行对象的构造函数,而无需事先分配内存。例如,当首先分配一个大数组,然后在其上构造许多对象时,可以使用它。

  • 但是,与标准库使用不同,这不是有效使用。这是在现有的活动对象之上构建的。 (2认同)