您好我在互联网上阅读了这个定义..
析构函数是执行的类的特殊成员函数 每当它的一个对象超出范围或每当它的时候 delete表达式应用于指向该类对象的指针。
我试过这段代码..
$title = $_POST['title'] ;
$tstring = "";
foreach( $title as $key => $value){
$tstring .= '<td style="border-right:1px solid #333;text- align:center">'.$value.'</td>';
}
它在程序结束时调用析构函数.. !!平均对象范围是程序的结束?对不起,我有点困惑......
答案 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之后,如果程序员不能使用该对象找到它的析构函数,那么它的系统生成的析构函数将被执行。销毁所有对象并释放内存..