1

luabind 0.81 の使用

問題を説明する簡単なテスト:

1)

class 'A'
function A:__init()
   print('A init\n')
end
function A:__finalize()
   print('A finalize\n')
end

do
   local obj = A()
end
collectgarbage("collect")

出力:
A init
A finalize

2)

class 'A'
function A:__init()
   print('A init\n')
end
function A:__finalize()
   print('A finalize\n')
end

class 'B' (A)
function B:__init()
   A.__init(self)
   print('B init\n')
end
function B:__finalize()
   print('B finalize\n')
end

do
   local obj = B()
end
collectgarbage('collect')

出力:
A init
B init

問題:親を持つクラスがガベージ コレクションで削除されません。

この問題を解決するには?ありがとうございました。

4

1 に答える 1

3

親を持つ lua クラスを luabind::object に格納するを参照してください。これは同じ問題です。Bインスタンスは「スーパー」アップバリューに残されます。

呼び出す前にグローバルsuperをに設定すると、問題が解消されます。nilcollectgarbage()

class 'A'
function A:__init()
   print('A init\n')
end
function A:__finalize()
   print('A finalize\n')
end

class 'B' (A)
function B:__init()
   A.__init(self)
   print('B init\n')
end
function B:__finalize()
   print('B finalize\n')
end

do
   local obj = B()
   super = nil
end
collectgarbage('collect')
于 2009-12-23T00:04:53.760 に答える