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