我想问一下在C++中怎样判断对象的作用范围结束和什么时候对象退出了生存期。谢谢啦!

C++,我们的课本对析构函数的定义是:“析构函数是在一个对象的作用范围结束或者说退出生存期时被系统自动调用的”老师给我们的代码如下:#include<iostream.h... C++,我们的课本对析构函数的定义是:“析构函数是在一个对象的作用范围结束或者说退出生存期时被系统自动调用的”
老师给我们的代码如下:
#include<iostream.h>
class A{
public:
A(){ cout<<"A->"; }
~A(){ cout<<"<-~A"; }
};//------------------------------------
class B{
public:
B(){ cout<<"B->"; }
~B(){ cout<<"<-~B"; }
};//------------------------------------
class C{
public:
C(){ cout<<"C->"; }
~C(){ cout<<"<-~C"; }
};//------------------------------------
void func(){
cout<<"\nfunc: ";
A a;
cout<<"ok->";
static B b;
C c;
}//--------------------------------------
int main(){
cout<<"main: ";
for(int i=1; i<=2; ++i){
for(int j=1; j<=2; ++j)
if(i==2) C c; else A a;
B b;
}
func();
func();
}<!--<"<!--<"<!--<"<!--
展开
 我来答
匿名用户
2013-12-17
展开全部
在C++里,任何一个对象,在new时就会在堆上构造出来,直到你使用delete时,才会利用析构函数销毁它。所以在你整个程序运行的过程中,无论new与delete发生在同一个函数内,还是跨越了若干个函数,只要new与delete没有配对使用,这个对象就一直活在内存堆上的。也正因为如此,C++里的内存操作需要异常小心,以避免发生内存泄漏。
追问
我问的是普通对象,不是那种new操作。普通对象是什么时候,rt!谢谢啦!
追答
普通对象?我没明白你对“对象”的理解。

只要你的类型是class,比如你上面A/B/C,那么你象A aaa;这样声明的都是A这个类的实例对象。那么aaa就需要通过new来构造,而new在内部又调用A的构造子。你不new,就没有A类的对象。

如果你说的不用new的,那就是诸如int i;这样的局部变量,这个是在函数退出前就结束了生命周期的。它的作用域仅限于函数体内,并且是被放在栈上的,所以函数退出恢复堆栈时就结束了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c281b4c
2013-12-16 · TA获得超过2293个赞
知道大有可为答主
回答量:2382
采纳率:50%
帮助的人:1051万
展开全部
从声明前的花括号开始,到匹配的花括号后结束。
追问
是指类的声明还是函数的声明?
是指类的声明还是函数的声明?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式