TEST(OwnedTest, Share) { Foo* foo = new Foo(); foo->set(42); Owned<Foo> owned(foo); EXPECT_EQ(42, owned->get()); EXPECT_EQ(42, (*owned).get()); EXPECT_EQ(42, owned.get()->get()); Shared<Foo> shared = owned.share(); EXPECT_EQ(NULL, owned.get()); EXPECT_TRUE(shared.unique()); EXPECT_EQ(42, shared->get()); EXPECT_EQ(42, (*shared).get()); EXPECT_EQ(42, shared.get()->get()); { Shared<Foo> shared2(shared); EXPECT_EQ(42, shared2->get()); EXPECT_EQ(42, (*shared2).get()); EXPECT_EQ(42, shared2.get()->get()); EXPECT_FALSE(shared.unique()); EXPECT_FALSE(shared2.unique()); } EXPECT_TRUE(shared.unique()); }