pointer01.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
12538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar//===----------------------------------------------------------------------===// 22538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// 32538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// ��������������������The LLVM Compiler Infrastructure 42538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// 52538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// This file is distributed under the University of Illinois Open Source 62538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// License. See LICENSE.TXT for details. 72538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// 82538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar//===----------------------------------------------------------------------===// 92538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 102538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// <memory> 112538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 122538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// unique_ptr 132538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 1437e3fe9ad7d7cb350cbbce0695c68d652d624bb4Benjamin Kramer// Test unique_ptr(pointer) ctor 152538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 162538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar#include <memory> 172538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar#include <cassert> 182538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 192538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar// unique_ptr(pointer) ctor should only require default Deleter ctor 202538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 212538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbarstruct A 222538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar{ 232538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar static int count; 242538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar A() {++count;} 252538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar A(const A&) {++count;} 262538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar ~A() {--count;} 272538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar}; 282538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 292538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbarint A::count = 0; 302538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 312538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbarclass Deleter 322538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar{ 332538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar int state_; 342538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 352538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar Deleter(Deleter&); 362538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar Deleter& operator=(Deleter&); 372538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 382538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbarpublic: 392538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar Deleter() : state_(5) {} 402538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 412538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar int state() const {return state_;} 422538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 432538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar void operator()(A* p) {delete p;} 442538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar}; 452538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar 462538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbarint main() 472538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar{ 482538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar { 492538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar A* p = new A; 502538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(A::count == 1); 512538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar std::unique_ptr<A> s(p); 522538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(s.get() == p); 532538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar } 542538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(A::count == 0); 552538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar { 562538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar A* p = new A; 572538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(A::count == 1); 582538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar std::unique_ptr<A, Deleter> s(p); 592538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(s.get() == p); 602538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(s.get_deleter().state() == 5); 612538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar } 622538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar assert(A::count == 0); 632538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar} 642538f7ab2ef39ab1a5e48744548d66b560d1fee6Daniel Dunbar