C ++'new'运算符 - 使用模式?

时间:2012-02-25 17:27:30

标签: c++ new-operator

我最近碰巧使用new运算符重新初始化了一个C ++类,代码如下:

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

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

有人能否对“新”运算符的使用有所了解?

2 个答案:

答案 0 :(得分:5)

此运算符称为placement new。它在给定地址处运行对象的构造函数,而无需事先分配内存。例如,可以在首先分配大型数组,然后在其上构建许多对象时使用它。

答案 1 :(得分:3)

它被称为“placement new”,通常用于构造特定内存位置的对象,而不是malloc返回的默认值。

它不应该以这种方式使用(双重构造),并且标准没有说明以这种方式使用它的行为是什么。

那说,至少在过去。全球的iostream曾经依赖于这种双重结构。 (但这仍然不是一个好主意。)