shared_ptr.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley//===----------------------------------------------------------------------===// 295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// 395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// The LLVM Compiler Infrastructure 495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// 595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// This file is distributed under the University of Illinois Open Source 695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// License. See LICENSE.TXT for details. 795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// 895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley//===----------------------------------------------------------------------===// 995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// <memory> 1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// shared_ptr 1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley// shared_ptr(const shared_ptr& r); 1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <memory> 1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#include <cassert> 1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleystruct A 2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley static int count; 2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley A() {++count;} 2495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley A(const A&) {++count;} 2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ~A() {--count;} 2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley}; 2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint A::count = 0; 2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 3095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyint main() 3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley{ 3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 3395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley std::shared_ptr<A> pA(new A); 3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA.use_count() == 1); 3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 1); 3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley std::shared_ptr<A> pA2(pA); 3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 1); 3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA.use_count() == 2); 4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA2.use_count() == 2); 4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA2.get() == pA.get()); 4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA.use_count() == 1); 4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 1); 4595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 0); 4795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 4895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley std::shared_ptr<A> pA; 4995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA.use_count() == 0); 5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 0); 5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley { 5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley std::shared_ptr<A> pA2(pA); 5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 0); 5495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA.use_count() == 0); 5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA2.use_count() == 0); 5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA2.get() == pA.get()); 5795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(pA.use_count() == 0); 5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 0); 6095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley } 6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley assert(A::count == 0); 6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 6395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley