From b6193185a0f326a2b74e50b73972c72b2438dfce Mon Sep 17 00:00:00 2001 From: Ahmed Charles Date: Wed, 5 Mar 2014 08:25:08 +0000 Subject: [PATCH] [C++11] Add release() to OwningPtr. This will make the transition to unique_ptr easier by allowing more incremental changes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202949 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/OwningPtr.h | 2 ++ unittests/ADT/OwningPtrTest.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/llvm/ADT/OwningPtr.h b/include/llvm/ADT/OwningPtr.h index 5453d5c84e4..034bcfd6edd 100644 --- a/include/llvm/ADT/OwningPtr.h +++ b/include/llvm/ADT/OwningPtr.h @@ -73,6 +73,8 @@ public: return Tmp; } + T *release() { return take(); } + std::unique_ptr take_unique() { return std::unique_ptr(take()); } T &operator*() const { diff --git a/unittests/ADT/OwningPtrTest.cpp b/unittests/ADT/OwningPtrTest.cpp index aef4d97bd66..8b10f475d09 100644 --- a/unittests/ADT/OwningPtrTest.cpp +++ b/unittests/ADT/OwningPtrTest.cpp @@ -90,6 +90,24 @@ TEST_F(OwningPtrTest, Take) { EXPECT_EQ(1u, TrackDestructor::Destructions); } +TEST_F(OwningPtrTest, Release) { + TrackDestructor::ResetCounts(); + TrackDestructor *T = 0; + { + OwningPtr O(new TrackDestructor(3)); + T = O.release(); + EXPECT_FALSE((bool)O); + EXPECT_TRUE(!O); + EXPECT_FALSE(O.get()); + EXPECT_FALSE(O.isValid()); + EXPECT_TRUE(T); + EXPECT_EQ(3, T->val); + EXPECT_EQ(0u, TrackDestructor::Destructions); + } + delete T; + EXPECT_EQ(1u, TrackDestructor::Destructions); +} + TEST_F(OwningPtrTest, MoveConstruction) { TrackDestructor::ResetCounts(); { -- 2.34.1