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