Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7789873
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 1, 20262026-06-01T21:25:29+00:00 2026-06-01T21:25:29+00:00

I am working on a c++ program which essentially just executes a lua script.

  • 0

I am working on a c++ program which essentially just executes a lua script. In that lua script however classes are constructed, which have been exported from my c++ program to the lua script.

My main() c++ function just calls after some preparations…

    luabind::call_function<void>(m_L, "main");

Now my lua script looks like this

local function test()
local c = C()
end

function main()
    for i=1,2 do
        log(i)
        test()
    end
end

I have included a std::cout << “destructor” << std::endl; in C’s destructor so I know when it is called. I would expect that lua’s garbage collection calls the destructor of c everytime execution of test() ends, because that is when it falls out of scope. Instead I see the following output:

1
2
destructor
destructor

rather than

1
destructor
2
destructor

Does anyone have an idea why this is? Am I missing something here?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-01T21:25:29+00:00Added an answer on June 1, 2026 at 9:25 pm

    I would expect that lua’s garbage collection calls the destructor of c everytime execution of test() ends, because that is when it falls out of scope.

    This is not the case. Lua’s garbage collection does not run at the end of every scope. It is typical of garbage collected languages that you can’t depend on when exactly the destructors are run, and in some languages an object may never be destroyed at all.

    There is not any way to make Lua automatically destroy objects deterministically like C++ does.

    If you have to depend on this then you may be able to get by with Lua’s collectgarbage function, however it would probably be better to simply change your expectations and redesign accordingly.

    Here’s the Lua documentation on how their garbage collection works.


    An example of using collectgarbage:

    local function test()
        local c = C()
    end
    
    function main()
        for i=1,2 do
            log(i)
            test()
            collectgarbage "collect"
        end
    end
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a python program that I am currently working on which is working
I have a simple Delphi program that I'm working on, in which I am
I'm working on a program that reads in users input as a string, which
I have a working program in C++ that generates data for a Mandelbrot Set.
I have a C# program which will have multiple instances that need to communicate
I have a program which consists of multiple projects in eclipse (working under ubuntu
I am working on a program which is essentially single-threaded, and its only thread
I am in desperate need of help. I have essentially created a program that
So I've been working on program in which I'm creating a hash table in
I have a program which does some copy jobs (via File.Copy) that could last

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.