C++调用析构函数后,对像是被销毁了不存在了吗,还是说只释放了内存?那为什么对象的成员变量还可以使用?
3个回答
展开全部
个人理解:只是对象在内存中的标记变成了自由内存,也就是说以后分配内存就可以把这块内存就当作空间再次分配了,而对对象的成员变量调用,实际上本质是该对象对应的内存地址加上变量偏移地址的引用。类似的比如在堆中分配了一块内存,用指针指向,但是如果回收了内存,但是指针还是保存着内存的地址,所以还是可以调用,但是这块内存随时可以随时被分配作他用。
更多追问追答
追问
就是说调用析构函数后,对象还是存在的,只是说对象占用的内存区域可以被其他的东西占用?
就是说调用析构函数后,对象还是存在的,只是说对象占用的内存区域可以被其他的东西占用?
展开全部
是这样麼:
寄存器变量
一般情况下,变量(包括静态存储方式和动态存储方式)的值都是存放在内存中的,当程序中用到哪一个变量的值时,同控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算。如果需要存数,再从运算器将数据送到内存存放。 但如果有一些变量使用频繁,为了节省存取时间,提高执行效率,C语言允许将其值存放在运算器中的寄存器中,需要时直接从寄存器中取出参加运算,不必再到内存中去存取,这种变量叫做“寄存器变量”,用关键字register于以说明,在函数内部定义。
说明 :
1、只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行。在调用一个函数时占用一些寄存器以存放寄存器变量的值,调用结束时释放寄存器。
2、一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存器变量,且不同的系统允许使用的寄存器变量个数不同。
3、不同系统对寄存器变量的处理是不同的。微机上用的MS C,Turbo C将寄存器变量当作自动变量处理,分配内存单元,并不真正把它们存放在寄存器中。因此,虽然程序合法,但并不提高执行速度。而PDP-11只允许将int、char和指针型变量定义为寄存器变量
4、局部静态变量不能定义为寄存器变量。即不能把变量既放在静态存储区中,又放在寄存器中。
参考:http://xyz64happy.blog.163.com/blog/static/98639677200810249133890/
寄存器变量
一般情况下,变量(包括静态存储方式和动态存储方式)的值都是存放在内存中的,当程序中用到哪一个变量的值时,同控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算。如果需要存数,再从运算器将数据送到内存存放。 但如果有一些变量使用频繁,为了节省存取时间,提高执行效率,C语言允许将其值存放在运算器中的寄存器中,需要时直接从寄存器中取出参加运算,不必再到内存中去存取,这种变量叫做“寄存器变量”,用关键字register于以说明,在函数内部定义。
说明 :
1、只有局部自动变量和形式参数可以作为寄存器变量,其他(如全局变量)不行。在调用一个函数时占用一些寄存器以存放寄存器变量的值,调用结束时释放寄存器。
2、一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存器变量,且不同的系统允许使用的寄存器变量个数不同。
3、不同系统对寄存器变量的处理是不同的。微机上用的MS C,Turbo C将寄存器变量当作自动变量处理,分配内存单元,并不真正把它们存放在寄存器中。因此,虽然程序合法,但并不提高执行速度。而PDP-11只允许将int、char和指针型变量定义为寄存器变量
4、局部静态变量不能定义为寄存器变量。即不能把变量既放在静态存储区中,又放在寄存器中。
参考:http://xyz64happy.blog.163.com/blog/static/98639677200810249133890/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象是被销毁了不存在了,对象的”遗体“是否可用就不知道了……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询