我想问一下在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();
}<!--<"<!--<"<!--<"<!-- 展开
老师给我们的代码如下:
#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();
}<!--<"<!--<"<!--<"<!-- 展开
2个回答
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;这样的局部变量,这个是在函数退出前就结束了生命周期的。它的作用域仅限于函数体内,并且是被放在栈上的,所以函数退出恢复堆栈时就结束了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询