没有新的C ++对象

这是一个非常简单的问题,但是我好几年没有做好C ++,所以我对此有点困惑。 另外,在互联网上查找并不是最简单的事情(至less对我来说),而不是尝试。

为什么这不使用new关键字,它是如何工作的?

基本上,这是怎么回事?

 CPlayer newPlayer = CPlayer(position, attacker); 

    这个expression式:

     CPlayer(position, attacker) 

    使用上面的构造函数创buildCPlayertypes的临时对象,然后:

     CPlayer newPlayer =...; 

    所提到的临时对象被复制使用复制构造函数newPlayer 。 更好的方法是写下以避免临时:

     CPlayer newPlayer(position, attacker); 

    上面在堆栈中构造了一个CPlayer对象,因此它不需要new 。 如果您尝试在堆上分配CPlayer对象,则只需要使用new 。 如果您使用堆分配,代码将如下所示:

     CPlayer *newPlayer = new CPlayer(position, attacker); 

    请注意,在这种情况下,我们正在使用一个指向CPlayer对象的指针,该对象将需要通过匹配的调用进行delete 。 分配到堆栈上的对象在超出范围时将自动销毁。

    其实写起来会更容易也更明显:

     CPlayer newPlayer(position, attacker); 

    很多编译器会优化你发布到上面的版本,阅读起来更清晰。

     CPlayer newPlayer = CPlayer(position, attacker); 

    这一行创build一个新的CPlayertypes的本地对象。 尽pipe它具有类似于function的外观,但它只是简单地调用CPlayer的构造函数。 不涉及临时或复制。 名为newPlayer的对象与其所在的范围保持一致。在此不使用new关键字,因为C ++不是Java。

     CPlayer* newPlayer = new CPlayer(position, attacker); 

    这一行在堆上构造一个CPlayer对象,并定义一个名为newPlayer的指针指向它。 该对象直到有人delete它。

    newPlayer不是dynamic分配的variables,而是一个自动的堆栈分配variables:

     CPlayer* newPlayer = new CPlayer(pos, attacker); 

    不同于

     CPlayer newPlayer = CPlayer(pos, attacker); 

    newPlayer通过正常的CPlayer(位置,攻击者)构造函数调用在堆栈上分配,虽然有些比通常冗长

     CPlayer newPlayer(pos, attacker); 

    这和说:

     int i = int(3);