blob: 5859d0c73d73202b7d1566512271cdf741d3768d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#ifndef WEAK_PTR_HH
#define WEAK_PTR_HH
#include <memory>
template <typename T>
class WeakPtr {
public:
explicit WeakPtr(T* ptr)
: ptr_(ptr) {}
void unlink() {
ptr_ = nullptr;
}
T* get() {
return ptr_;
}
private:
T* ptr_;
};
template<typename T>
class WeakPtrOwner {
public:
explicit WeakPtrOwner(T* ptr)
: ptr_(std::make_shared<WeakPtr<T>>(ptr)) {}
~WeakPtrOwner() {
ptr_->unlink();
}
std::shared_ptr<WeakPtr<T>> get() {
return ptr_;
}
private:
std::shared_ptr<WeakPtr<T>> ptr_;
};
#endif // WEAK_PTR_HH
|