int main() { { std::shared_ptr<A> pA(new A); assert(pA.use_count() == 1); assert(A::count == 1); { std::shared_ptr<A> pA2(pA); assert(A::count == 1); assert(pA.use_count() == 2); assert(pA2.use_count() == 2); assert(pA2.get() == pA.get()); } assert(pA.use_count() == 1); assert(A::count == 1); } assert(A::count == 0); { std::shared_ptr<A> pA; assert(pA.use_count() == 0); assert(A::count == 0); { std::shared_ptr<A> pA2(pA); assert(A::count == 0); assert(pA.use_count() == 0); assert(pA2.use_count() == 0); assert(pA2.get() == pA.get()); } assert(pA.use_count() == 0); assert(A::count == 0); } assert(A::count == 0); }
int tc_libcxx_utilities_util_smartptr_shared_const_shared_ptr_rv(void) { A::count = 0; { std::shared_ptr<A> pA(new A); TC_ASSERT_EXPR(pA.use_count() == 1); TC_ASSERT_EXPR(A::count == 1); { A* p = pA.get(); std::shared_ptr<A> pA2(std::move(pA)); TC_ASSERT_EXPR(A::count == 1); #if TEST_STD_VER >= 11 TC_ASSERT_EXPR(pA.use_count() == 0); TC_ASSERT_EXPR(pA2.use_count() == 1); #else TC_ASSERT_EXPR(pA.use_count() == 2); TC_ASSERT_EXPR(pA2.use_count() == 2); #endif TC_ASSERT_EXPR(pA2.get() == p); } #if TEST_STD_VER >= 11 TC_ASSERT_EXPR(pA.use_count() == 0); TC_ASSERT_EXPR(A::count == 0); #else TC_ASSERT_EXPR(pA.use_count() == 1); TC_ASSERT_EXPR(A::count == 1); #endif } TC_ASSERT_EXPR(A::count == 0); { std::shared_ptr<A> pA; TC_ASSERT_EXPR(pA.use_count() == 0); TC_ASSERT_EXPR(A::count == 0); { std::shared_ptr<A> pA2(std::move(pA)); TC_ASSERT_EXPR(A::count == 0); TC_ASSERT_EXPR(pA.use_count() == 0); TC_ASSERT_EXPR(pA2.use_count() == 0); TC_ASSERT_EXPR(pA2.get() == pA.get()); } TC_ASSERT_EXPR(pA.use_count() == 0); TC_ASSERT_EXPR(A::count == 0); } TC_ASSERT_EXPR(A::count == 0); TC_SUCCESS_RESULT(); return 0; }