在这个对象的作用域最后..比如你在main里面声明了一个类A..那么~A()会在main结束时调用..如果在自定义的函数f()里面声明了一个A 函数f结束的时候就会调用~A()或者你delete 指向A的指针..或者显式的调用析构函数
追问:
也就是说在包含该对象的函数的末尾就会调用析构函数喽?
追答:
是的....局部的对象 在该对象声明的函数末尾被释放...你可以看下作用域的定义..析构函数就是在对象的作用域的末尾释放为了不误导人...我还是举个例子..如果是class A{....}void f(){A a;//这种情况a的作用域就是整个函数 在f末尾释放}void f(){for(A a;a.yes();a++)//这里声明的是一个计数器a..(这种情况一般是迭代器)..{...} //这里是a作用域结束的时候 调用析构函数}void f(){A* p=new A;delete p;//A作用域结束 调用析构}如果A是全局对象..那么就在程序末尾释放显式的调用很少见..我就不举例了..