这两种新语法之间的区别是什么?

时间:2014-04-08 21:38:41

标签: c++ new-operator

当我们交换它们时,这两者之间有什么区别?它为我编译。

int main()
{
    X p;
    X* ptr = new (&p) X;

    X* ptr = new X (&p);
}

1 个答案:

答案 0 :(得分:4)

该行

X* ptr = new (&p) X;

使用展示位置新X指向的位置构建&p类型的新对象。这会在此特定上下文中导致未定义的行为,因为p已经在其位置上有一个对象(除非X可以轻易地复制和破坏)。然后它返回一个指向该对象的指针,该指针与p处于同一地址,因此当我们完成p时,ptr将指向同一个对象。

该行

X* ptr = new X (&ptr);

在动态分配的位置构造一个类型为X的新对象,并将&ptr的值传递给构造函数。仅当X具有接纳X*的构造函数时,此方法才有效。然后表达式返回一个指向新对象的指针,该指针不能与&p相同。

希望这有帮助!