Fix ref<T>::~ref to not try to RemoveRef if already deleted.
[zcpointer.git] / test.cc
1 // Copyright 2016 Google Inc. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include <iostream>
16
17 #include "zcpointer.h"
18
19 class C {
20 public:
21 ~C() {
22 std::cout << "~C" << std::endl;
23 }
24
25 void DoThing() {
26 std::cout << "DoThing" << std::endl;
27 }
28 };
29
30 void TestReset() {
31 zc::owned<C> c(new C());
32 zc::ref<C> owned = c.get();
33 zc::ref<C> owned2 = owned;
34 c.reset();
35 owned2->DoThing();
36 }
37
38 template <typename T>
39 void TestUnwrap() {
40 zc::owned<T> t(new T());
41 //T* unwrap = t.get();
42
43 zc::ref<T> ref = t.get();
44 T* unwrap2 = ref;
45 }
46
47 void TestMove() {
48 zc::owned<C> c(new C());
49 zc::ref<C> owned = c.get();
50
51 zc::owned<C> c2(std::move(c));
52 owned->DoThing();
53
54 c2.reset();
55 owned->DoThing();
56 }
57
58 void PtrHelper(zc::ref<C>* out) {
59 zc::owned<C> c(new C());
60 *out = c.get();
61 }
62
63 void TestPtr() {
64 zc::ref<C> ref;
65 PtrHelper(&ref);
66 ref->DoThing();
67 }
68
69 int main() {
70 TestPtr();
71 }