brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 94986ea Raw
108 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <memory>10 11// shared_ptr12 13// template<class T> void swap(shared_ptr<T>& a, shared_ptr<T>& b);14 15#include <memory>16#include <cassert>17 18#include "test_macros.h"19 20struct A21{22    static int count;23 24    A() {++count;}25    A(const A&) {++count;}26    ~A() {--count;}27};28 29int A::count = 0;30 31int main(int, char**)32{33    {34        A* ptr1 = new A;35        A* ptr2 = new A;36        std::shared_ptr<A> p1(ptr1);37        {38            std::shared_ptr<A> p2(ptr2);39            swap(p1, p2);40            assert(p1.use_count() == 1);41            assert(p1.get() == ptr2);42            assert(p2.use_count() == 1);43            assert(p2.get() == ptr1);44            assert(A::count == 2);45        }46        assert(p1.use_count() == 1);47        assert(p1.get() == ptr2);48        assert(A::count == 1);49    }50    assert(A::count == 0);51    {52        A* ptr1 = new A;53        A* ptr2 = 0;54        std::shared_ptr<A> p1(ptr1);55        {56            std::shared_ptr<A> p2;57            swap(p1, p2);58            assert(p1.use_count() == 0);59            assert(p1.get() == ptr2);60            assert(p2.use_count() == 1);61            assert(p2.get() == ptr1);62            assert(A::count == 1);63        }64        assert(p1.use_count() == 0);65        assert(p1.get() == ptr2);66        assert(A::count == 0);67    }68    assert(A::count == 0);69    {70        A* ptr1 = 0;71        A* ptr2 = new A;72        std::shared_ptr<A> p1;73        {74            std::shared_ptr<A> p2(ptr2);75            swap(p1, p2);76            assert(p1.use_count() == 1);77            assert(p1.get() == ptr2);78            assert(p2.use_count() == 0);79            assert(p2.get() == ptr1);80            assert(A::count == 1);81        }82        assert(p1.use_count() == 1);83        assert(p1.get() == ptr2);84        assert(A::count == 1);85    }86    assert(A::count == 0);87    {88        A* ptr1 = 0;89        A* ptr2 = 0;90        std::shared_ptr<A> p1;91        {92            std::shared_ptr<A> p2;93            swap(p1, p2);94            assert(p1.use_count() == 0);95            assert(p1.get() == ptr2);96            assert(p2.use_count() == 0);97            assert(p2.get() == ptr1);98            assert(A::count == 0);99        }100        assert(p1.use_count() == 0);101        assert(p1.get() == ptr2);102        assert(A::count == 0);103    }104    assert(A::count == 0);105 106  return 0;107}108