blob: 3cab9ec941c6ca4c1f756a3b111cb7b4e3bb8f0a (
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
43
44
45
46
47
48
49
50
51
52
53
54
55
|
#pragma once
#include "unique_ptr.hpp"
namespace common
{
template <class Target>
UniquePtr<Target>::UniquePtr(Target *target) : _target(target)
{
}
template <class Target>
UniquePtr<Target>::UniquePtr(UniquePtr &&unique_ptr) noexcept
: _target(unique_ptr._target)
{
unique_ptr._target = nullptr;
}
template <class Target>
UniquePtr<Target> &UniquePtr<Target>::operator=(UniquePtr &&unique_ptr) noexcept
{
if (&unique_ptr != this)
{
delete _target;
_target = unique_ptr._target;
unique_ptr._target = nullptr;
}
return *this;
}
template <class Target>
UniquePtr<Target>::~UniquePtr()
{
delete _target;
}
template <class Target>
Target UniquePtr<Target>::operator*() const
{
return *(_target);
}
template <class Target>
Target *UniquePtr<Target>::operator->() const
{
return _target;
}
template <class Target, typename... Args>
UniquePtr<Target> make_unique(Args... args)
{
return UniquePtr<Target>(new Target(args...));
}
} // namespace common
|