c++ - 快速内存分配/范围问题

标签 c++ class memory memory-management constructor

例如这个类:

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;

}

关于c++ - 快速内存分配/范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4693886/

相关文章:

c++ - std::getline() 访问冲突,曾经有效但现在无法读取任何文件

python tkinter calender,放置数字

java - 类实例化与通过引用检索

c++ - C++ 中指向自身内部类的指针

c++ - 数组旋转有哪些应用?

c++ - 将控制台应用程序变成服务?

C++更新/更改来自不同类/变量的变量

c - 嵌入式软件 - 为什么查找表中需要 'const'?

algorithm - 来自一组区间的第 K 个最小值

c - 本地调用静态变量是否正确?