本文整理汇总了C++中kaguya::State::garbageCollect方法的典型用法代码示例。如果您正苦于以下问题:C++ State::garbageCollect方法的具体用法?C++ State::garbageCollect怎么用?C++ State::garbageCollect使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类kaguya::State
的用法示例。
在下文中一共展示了State::garbageCollect方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: function
KAGUYA_TEST_FUNCTION_DEF(object_take_copy)(kaguya::State& state)
{
state["Base"].setClass(kaguya::ClassMetatable<Base>()
.addConstructor()
.addProperty("a", &Base::a)
);
TEST_CHECK(state("fn = function(object,value) object.a = value end"));
{
Base base;
base.a = 232;
state["obj"] = base;
TEST_CHECK(state("assert(obj.a==232)"));
TEST_CHECK(state("obj.a = 2"));
TEST_CHECK(state("assert(obj.a==2)"));
TEST_EQUAL(base.a, 232);
state.garbageCollect();
TEST_CHECK(state("assert(obj.a==2)"));
state["fn"](base, 54);
TEST_EQUAL(base.a, 232);
}
{//
Base basesrc;
Base& base = basesrc;
base.a = 232;
state["obj"] = base;
TEST_CHECK(state("assert(obj.a==232)"));
TEST_CHECK(state("obj.a = 2"));
TEST_CHECK(state("assert(obj.a==2)"));
TEST_EQUAL(base.a, 232);
state.garbageCollect();
TEST_CHECK(state("assert(obj.a==2)"));
state["fn"](base, 54);
TEST_EQUAL(base.a, 232);
}
{//
Base basesrc;
const Base& base = basesrc;
basesrc.a = 232;
state["obj"] = base;
TEST_CHECK(state("assert(obj.a==232)"));
TEST_CHECK(state("obj.a = 2"));
TEST_CHECK(state("assert(obj.a==2)"));
TEST_EQUAL(base.a, 232);
state.garbageCollect();
TEST_CHECK(state("assert(obj.a==2)"));
state["fn"](base, 54);
TEST_EQUAL(base.a, 232);
}
}
示例2: assert
KAGUYA_TEST_FUNCTION_DEF(copy_constructor)(kaguya::State& state)
{
state["ABC"].setClass(kaguya::ClassMetatable<ABC>()
.addConstructor<const char*>()
.addConstructor<int>()
.addConstructor<std::string>()
.addConstructor<int, const std::string&>()
.addConstructor<const std::string&, int>()
.addMember("getString", &ABC::getString)
.addMember("setString", &ABC::setString)
.addMember("getInt", &ABC::getInt)
.addMember("references", static_cast<ABC& (ABC::*)()>(&ABC::references))
.addMember("references", static_cast<const ABC& (ABC::*)()const>(&ABC::references))
.addMember("const_pointer", &ABC::const_pointer)
.addMember("pointer", &ABC::pointer)
.addMember("copy", &ABC::copy)
.addMember("shared_copy", &ABC::shared_copy)
);
TEST_CHECK(state("value = assert(ABC.new(64,'string_value3'))"));
TEST_CHECK(state("value2 = assert(value:copy())"));
TEST_CHECK(state("assert(value2:getString() == 'string_value3')"));
TEST_CHECK(state("assert(value2:getInt() == 64)"));
TEST_CHECK(state("value3 = assert(value:references())"));
TEST_CHECK(state("cvalue = assert(value:const_pointer())"));
TEST_CHECK(state("assert(cvalue:getString() == 'string_value3')"));
TEST_CHECK(state("assert(cvalue:getInt() == 64)"));
TEST_CHECK(state("assert(value3:getString() == 'string_value3')"));
TEST_CHECK(state("assert(value3:getInt() == 64)"));
TEST_CHECK(state("value4 = assert(value:pointer())"));
TEST_CHECK(state("assert(value4:getString() == 'string_value3')"));
TEST_CHECK(state("assert(value4:getInt() == 64)"));
TEST_CHECK(state("value5 = assert(value:shared_copy())"));
TEST_CHECK(state("value =1"));
state.garbageCollect();//warning!! value3 and value4 to dangling pointer
TEST_CHECK(state("assert(value5:getString() == 'string_value3')"));
TEST_CHECK(state("assert(value5:getInt() == 64)"));
{
kaguya::standard::shared_ptr<ABC> shared_ptr(new ABC("shared_object", 53));
state["shared_object"] = shared_ptr;
}
TEST_CHECK(state("assert(shared_object:getInt() == 53)"));
TEST_CHECK(state("assert(shared_object:getString() =='shared_object')"));
};