diff options
Diffstat (limited to 'deps/sol2/examples/source/tutorials/object_lifetime.cpp')
-rw-r--r-- | deps/sol2/examples/source/tutorials/object_lifetime.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/deps/sol2/examples/source/tutorials/object_lifetime.cpp b/deps/sol2/examples/source/tutorials/object_lifetime.cpp new file mode 100644 index 0000000..3ed3f41 --- /dev/null +++ b/deps/sol2/examples/source/tutorials/object_lifetime.cpp @@ -0,0 +1,37 @@ +#define SOL_ALL_SAFETIES_ON 1
+#include <sol/sol.hpp>
+
+#include <string>
+#include <iostream>
+
+int main () {
+ sol::state lua;
+ lua.open_libraries(sol::lib::base);
+
+ lua.script(R"(
+ obj = "please don't let me die";
+ )");
+
+ sol::object keep_alive = lua["obj"];
+ lua.script(R"(
+ obj = nil;
+ function say(msg)
+ print(msg)
+ end
+ )");
+
+ lua.collect_garbage();
+
+ lua["say"](lua["obj"]);
+ // still accessible here and still alive in Lua
+ // even though the name was cleared
+ std::string message = keep_alive.as<std::string>();
+ std::cout << message << std::endl;
+
+ // Can be pushed back into Lua as an argument
+ // or set to a new name,
+ // whatever you like!
+ lua["say"](keep_alive);
+
+ return 0;
+}
|