仅供参考,儿童范围?

时间:2017-10-24 13:07:54

标签: c++ memory-management reference

我试过这个,因为我打赌这些问题已经存在。但是我只能在全局设置中获得有关通过引用传递的主题。

我想知道以下事项;

变量范围仅在此函数中,并在离开范围时将被清除

void Class::DoSomething(){
    String s = "localVariable"; 

    cout << s;
}

如果我要在以下两个函数中更改先前函数。范围是否也只在父函数中,是否可以释放变量内存,还是必须调用free()?

void Class::DoSomethingParent(){
    String s = "localVariable"; //Local scope only

    //This function uses the reference of my variable s. 
    Class::DoSomethingChild(s);

    //Does the prior function do anything special because of the reference,
    //so I have to call free(s)?

    //Or does the variable still gets freed after leaving the scope of this function?
}
void Class::DoSomethingChild(String& value){
    cout << value;
}

1 个答案:

答案 0 :(得分:2)

C ++中具有自动存储持续时间的对象本质上是在功能块范围内声明的对象,范围拥有控制生命周期其中创建的此类对象。例如:

void function(){
   ....
   String s = "Some Data";
   someFuncByReference(s);
   ....
} //All objects of automatic storage duration owned by this scope are destroyed here...

无论是通过引用传递对象还是获取对象的地址,都传递给函数。被调用函数someFuncByReference仍然无法控制s的生命周期,也不应该破坏s 1

这适用于任何“ function ”,包括非成员函数成员函数函数专精由模板制作。请注意,这与类的数据成员不同。类数据成员的生命周期由该类的构造函数和析构函数控制。

1:但是,如果是,则必须使用 placement-new 创建另一个。功能