例如此类:

class RTPIPv4Address{
     public:
           RTPIPv4Address(int a, int b);
}


愚蠢的问题,但是...我偶然发现了例如使用此类初始化类实例的代码

RTPIPv4Address adr(2,2);


现在我想知道,这只是通常的另一种语法

RTPIPv4Address* adr = new RTPIPv4Address (2,2);


还是有其他影响?例如,由于缺少指针和new(),它是否像其他局部变量一样在堆栈上声明,然后在函数返回时被释放,还是保存在堆上并因此持久化?

提前致谢

最佳答案

是的,第一个示例是堆栈分配的,将调用它的析构函数,并在变量失去作用域后立即将其释放。对于局部变量,这通常在函数返回时发生,尽管您可以使用花括号强制它早些失去作用域。

function
{
    RTPIPv4Address adr(2,2);

    return; //adr loses scope and destructor is called
}


这就是通常在堆栈上分配它的方式以及失去作用域的方式,但是它也可能发生在其他地方。

function
{
    if (condition)
    {
        RTPIPv4Address adr(2, 2);

         //do stuff with adr

     } //adr loses scope and destructor is called

    //do more stuff

    return;

}

09-05 20:41