在Lua函数块中创建的局部C++类,为什么在函数执行完之后不析构?
lua吧
全部回复
仅看楼主
level 1
专业水表修理工
楼主
如图,CharList就是这个C++类,用local修饰,但函数执行完后names这个类对象不会析构(销毁)。在函数末尾加上一句 names=nil 也不会析构
必须要我在C++中调用lua_close(L);关掉Lua状态才析构
这样只要我没调用这个函数一次,就会创建一个CharList对象,直到调用lua_close(L);这些
对象才销毁,为什么函数执行完时不销毁?
2015年09月18日 12点09分
1
level 1
专业水表修理工
楼主
this是这个函数前面的全局变量,不用管这个
2015年09月18日 12点09分
2
level 11
协调意志_Tox
这要去看看lua的垃圾回收机制,说不定你那里就跳过了weak表,使他跳过回收,或者哪里还在使用它
2015年09月21日 00点09分
3
专业水表修理工
经楼下一说,原来lua中的局部变量回收不是像C/C++一样在局部变量的作用域(语句块)结束后就回收,要立即回收的话得手动调用collectgarbage()
2015年09月21日 03点09分
协调意志_Tox
回复
רҵˮ��������
:貌似是这样,没有测试过,,,
2015年09月21日 08点09分
level 8
ks_isaf
lua中的所有对象都是在垃圾回收的的时候销毁的。
你每调用一次这个函数确实会造成内存的增长,但到一定程度就会触发垃圾回收,你的C++对象就会被销毁。
如果你想立刻销毁,可以调用collectgarbage()。
2015年09月21日 02点09分
4
level 1
专业水表修理工
楼主
@ks_isaf
如果我在这个函数末尾调用collectgarbage(),那么这个local的names变量因为函数没结束,所以不会得到回收。现在因为我想每次函数调用后都进行垃圾回收,所以在lua里定义了这个函数:
然后在C++中每次调用函数后都调用这个CollectGarbage()函数:
我现在的问题是:像这样每调用一个函数就调用一次lua的collectgarbage(),对于程序在时间上的开销会不会有明显的加大?
2015年09月21日 03点09分
5
专业水表修理工
CollectGarbage()函数里的CharDebug()函数无视,调试用的
2015年09月21日 03点09分
ks_isaf
显然会。
2015年09月21日 06点09分
level 11
同在二要
手动释放吧/w\
2015年09月22日 08点09分
6
1