//===----------------------------------------------------------------------===// | |
// | |
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
// See https://llvm.org/LICENSE.txt for license information. | |
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
// | |
//===----------------------------------------------------------------------===// | |
// <memory> | |
// shared_ptr | |
// template<class Y> void reset(Y* p); | |
#include <memory> | |
#include <cassert> | |
struct B | |
{ | |
static int count; | |
B() {++count;} | |
B(const B&) {++count;} | |
virtual ~B() {--count;} | |
}; | |
int B::count = 0; | |
struct A | |
: public B | |
{ | |
static int count; | |
A() {++count;} | |
A(const A&) {++count;} | |
~A() {--count;} | |
}; | |
int A::count = 0; | |
int main(int, char**) | |
{ | |
{ | |
std::shared_ptr<B> p(new B); | |
A* ptr = new A; | |
p.reset(ptr); | |
assert(A::count == 1); | |
assert(B::count == 1); | |
assert(p.use_count() == 1); | |
assert(p.get() == ptr); | |
} | |
assert(A::count == 0); | |
{ | |
std::shared_ptr<B> p; | |
A* ptr = new A; | |
p.reset(ptr); | |
assert(A::count == 1); | |
assert(B::count == 1); | |
assert(p.use_count() == 1); | |
assert(p.get() == ptr); | |
} | |
assert(A::count == 0); | |
return 0; | |
} |