在这个对象的作用域最后.. 比如你在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是全局对象..那么就在程序末尾释放 显式的调用很少见..我就不举例了..