reset1.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===----------------------------------------------------------------------===//
2b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//
3b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//                     The LLVM Compiler Infrastructure
4b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//
5b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// This file is dual licensed under the MIT and the University of Illinois Open
6b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// Source Licenses. See LICENSE.TXT for details.
7b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//
8b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik//===----------------------------------------------------------------------===//
9b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
10b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// <memory>
11b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
12b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// unique_ptr
13b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
14b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik// test reset
15b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
16b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#include <memory>
17b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik#include <cassert>
18b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
19b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzikstruct A
20b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik{
21b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    static int count;
22b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    A() {++count;}
238cb8b2086426108c6ea737d83cfd739ae5e5d8d9Nick Kledzik    A(const A&) {++count;}
24b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    ~A() {--count;}
25b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik};
26b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
27b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzikint A::count = 0;
28b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik
29b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzikint main()
30b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik{
31b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    {
32b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    std::unique_ptr<A[]> p(new A[3]);
33b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(A::count == 3);
34b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    A* i = p.get();
35b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    p.reset();
36b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(A::count == 0);
37b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(p.get() == 0);
38b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    }
39b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(A::count == 0);
40b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    {
41b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    std::unique_ptr<A[]> p(new A[4]);
42b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(A::count == 4);
43b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    A* i = p.get();
44b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    p.reset(new A[5]);
45b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(A::count == 5);
46e085735cbedc82b1064f05ff796e32e906a95036Dan Albert    }
47b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik    assert(A::count == 0);
48b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik}
49b78da9875b6e35187b5d584746c78faaf3230a3dNick Kledzik