例如此类:
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;
}