例如这个类:
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/