繁体   English   中英

这两种新语法有什么区别?

[英]What's the difference between these two new syntaxes?

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

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

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

线

X* ptr = new (&p) X;

使用new放置&p指向的位置构造一个X类型的新对象。 这会导致在此特定上下文中发生未定义的行为,因为p已经在其位置具有对象(除非X是平凡的可复制和可破坏的)。 然后,它返回一个指向该对象的指针,该指针将与p处于相同的地址,因此,完成后pptr将指向同一对象。

线

X* ptr = new X (&ptr);

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM