什么是Oop中的对象范围?

时间:2015-05-09 11:21:42

标签: c++ class oop object

您好我在互联网上阅读了这个定义..

  

析构函数是执行的类的特殊成员函数   每当它的一个对象超出范围或每当它的时候   delete表达式应用于指向该类对象的指针。

我试过这段代码..

$title = $_POST['title'] ;
$tstring = "";
foreach( $title as $key => $value){
    $tstring .= '<td style="border-right:1px solid #333;text-    align:center">'.$value.'</td>';
}

它在程序结束时调用析构函数.. !!平均对象范围是程序的结束?对不起,我有点困惑......

4 个答案:

答案 0 :(得分:3)

在您的情况下,obj范围的末尾位于main函数的末尾,但它可以是任何其他范围,具体取决于您定义obj的位置。例如:

int main(){
    // open a new scope here
    {
        // now 'obj' will be in the new scope
        Name obj;
        obj.Fun();
    }
    // the scope ended here, 'obj' destroyed now
    cout << "End" << endl;
    return 0;
}

您可以找到more information here,查看“Scope”和“Lifetime”的“基本概念”。

答案 1 :(得分:2)

Scope是程序中的一个区域,用于定义在其中定义的对象的生命周期。在几乎所有情况下,它都由大括号定义。因此,当你定义了函数时,它的主体定义了一个范围。

main在范围定义方面没有任何特殊之处。

更多案例:

int fun(){ // one scope

  for(int i = 0; i < 1337; ++i){ // another scope
    //note that i is defined within `for` scope not outside
  }

  if(true){ // same here
  }

  { // you can even start and end scope at will
     A a;
  } // a will die here

  { // sometimes it is useful for redeclaring a variable, probably not best practice
     A a; // this is legal
  }
}

答案 2 :(得分:0)

您创建的对象obj是一个变量,它具有范围的任何变量。范围由大括号定义,其中创建了变量。在您的情况下,您创建的obj的范围是main函数,因为它放在该函数的大括号之间。当main函数结束时,您的对象不再可用(它只在该函数中可用),这就是调用析构函数的原因。

您也可以通过将对象放入大括号中来定义自己的范围:

main(){
    cout<<"scope of the main function"<<endl; 

    {
        cout <<"scope where obj created"<<endl;
        Name obj;
    }
    cout << "obj destroyed"<<endl;

    cout << "End of main" <<endl;
}

答案 3 :(得分:0)

在你的情况下它的C#程序,在对象的情况下,在程序结束后它的可用性结束,即在执行main之后,如果程序员不能使用该对象找到它的析构函数,那么它的系统生成的析构函数将被执行。销毁所有对象并释放内存..