void weak_shared( WP & first, SP & second ){ const char * testfile = boost::archive::tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); BOOST_CHECK(! first.expired()); int firstm = first.lock()->m_x; int secondm = second->m_x; save2(testfile, first, second); // Clear the pointers, thereby destroying the objects they contain first.reset(); second.reset(); load2(testfile, first, second); BOOST_CHECK(! first.expired()); // Check data member BOOST_CHECK(firstm == first.lock()->m_x); BOOST_CHECK(secondm == second->m_x); // Check pointer to vtable BOOST_CHECK(::dynamic_pointer_cast<Sub>(first.lock())); BOOST_CHECK(::dynamic_pointer_cast<Sub>(second)); std::remove(testfile); }
void save_and_load2(SP & first, SP & second) { const char * testfile = boost::archive::tmpnam(NULL); BOOST_REQUIRE(NULL != testfile); save2(testfile, first, second); // Clear the pointers, thereby destroying the objects they contain first.reset(); second.reset(); load2(testfile, first, second); BOOST_CHECK(first == second); std::remove(testfile); }