2011-01-16 3 views
0

루아 바인드에 문제가 있습니다. 루아에서 생성 된 객체를 할당하기 위해 std :: map을 정의한다. 나는이 방법으로 루아의 전역 객체로이지도를 게시 : 그 후언제 생성 된 객체가 루아 바인드 되나요?

luabind::globals(L)["g_SceneManager2D"] = this; 

,이 개체는 많은 개체가 생성이 맵에 삽입 루아로 함수에 사용됩니다. 루아 함수가 종료되고 luabind가 컨트롤을 C++ 사이드 프로그램에 반환하면 문제가 발생합니다. 자동으로 맵의 모든 내용이 손실되기 때문입니다.

내가 오류를 찾으러했다. 루아 컨텍스트를 유지하기 때문에이 객체가 존재해야합니다.

도와 주시겠습니까 ??

많은 감사 :)

+0

더 많은 코드를 게시하면 더 좋은 답변을 얻을 수 있습니다. 어떤 유형이'this'이며 내 보낸 메소드의 함수 선언과 해당 함수를 호출하는 루아 코드입니다. – sbk

답변

1

차라리 원시 this보다 shared_ptr<>(this)를 사용하는 것이 좋습니다. boost::shared_from_this 도움이 될 수 있습니다. 수업이 Luabind를 사용하여 등록되어 있고 class_shared_ptr에 의해 소유로 지정되어 있는지 확인하십시오.

또 다른 재미있는 아이디어는 Lua 함수가 루아 테이블로 "맵"을 생성하고 반환하고 C++로 반복하여 std::map을 빌드하는 것입니다.

1

내가 올바르게 문제를 이해한다면, Lua에서 객체를 생성하는 것입니다. 그러면 Lua 또는 C++를 통해지도에 삽입 한 다음 잃게됩니다. 더 많은 코드가 없으면 문제가 무엇인지 정확히 말하기 어렵습니다. 그러나, 나는 먼저 그 객체들이 실제로 만들어지고 있는지 (이중 체크), 루아가 쓰레기를 모으지 않았는지 확인하려고한다. 루아가 실제로 그러한 객체를 가비지 수집하는 경우, C++ 측에서 볼 수 없습니다.

도움이된다면 비슷한 것을 수행하는 프로젝트를 마무리하고 있습니다. 루아에서 C++ 오브젝트를 생성하고 검색해야했지만 루아에서 오브젝트를 작성하는 대신 C++ 함수를 호출하여 Lua 호출 (루아 바인드에 바인딩 된)에서 필요한 데이터를 전송했습니다. 이러한 (C++) 함수는 ID로 객체를 해시 테이블에 색인화하고 ID를 작업에 대해 스크립트 측 객체를 검색해야하는 경우 Lua로 반환했습니다. 이 설정은 메모리를 올바르게 처리하고 (그리고 더 안전하게) Lua가 객체를 가비지 수집하는 것을 방지합니다.

관련 문제