#define BOOST_TEST_DYN_LINK #define BOOST_TEST_MAIN // in only one cpp file #include #include "core/small_obj.hpp" using namespace sophiar; BOOST_AUTO_TEST_CASE(test_small_obj) { struct test_obj : public small_obj { explicit test_obj(int &_p) : probe(_p) { probe = 1; } ~test_obj() { probe = 2; } int &probe; }; int my_probe = 0; { auto obj = test_obj::new_instance(my_probe); BOOST_TEST(my_probe == 1); } BOOST_TEST(my_probe == 2); my_probe = 0; { test_obj::pointer obj_2; { auto obj = test_obj::new_instance(my_probe); obj_2 = obj; BOOST_TEST(my_probe == 1); BOOST_TEST(obj_2->ref_count == 2); } BOOST_TEST(my_probe == 1); BOOST_TEST(obj_2->ref_count == 1); } BOOST_TEST(my_probe == 2); }