neoWidgets
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Enumerations
Enumerator
Pages
include
neo
ComPtr.h
1
#ifndef NEO_COMPTR_H
2
#define NEO_COMPTR_H
3
4
namespace
neo
5
{
6
13
template
<
typename
T>
14
class
ComPtr
15
{
16
public
:
17
ComPtr
()
18
: _ptr(
nullptr
)
19
{}
20
21
ComPtr
(T* p)
22
: _ptr(p)
23
{}
24
25
// copy ctor
26
ComPtr
(
const
ComPtr<T>
& other)
27
: _ptr(other._ptr)
28
{
29
_ptr->AddRef();
30
}
31
32
// assignment operator
33
ComPtr
& operator= (
const
ComPtr
& other)
34
{
35
_ptr = other._ptr;
36
_ptr->AddRef();
37
return
*
this
;
38
}
39
40
// move ctor
41
ComPtr
(
ComPtr
&& other)
42
{
43
_ptr = other._ptr;
44
other._ptr =
nullptr
;
45
}
46
47
// move operator
48
ComPtr
& operator= (
ComPtr
&& other)
49
{
50
if
(
this
!= &other)
51
{
52
_ptr = other._ptr;
53
other._ptr =
nullptr
;
54
}
55
return
*
this
;
56
}
57
58
~
ComPtr
()
59
{
60
if
(_ptr)
61
_ptr->Release();
62
}
63
64
void
Release()
65
{
66
if
(_ptr)
67
_ptr->Release();
68
_ptr =
nullptr
;
69
}
70
75
T**
PtrPtr
()
76
{
77
Release();
78
return
&_ptr;
79
}
80
81
operator
T* ()
const
{
return
_ptr; }
82
T* operator -> ()
const
{
return
_ptr; }
83
T& operator * ()
const
{
return
*_ptr; }
84
private
:
85
T* _ptr;
86
};
87
88
}
// namespace neo
89
90
#endif
neo::ComPtr
Smart pointer to COM classes.
Definition:
ComPtr.h:14
neo::ComPtr::PtrPtr
T ** PtrPtr()
Definition:
ComPtr.h:75
Generated on Sun Jun 8 2014 09:42:27 for neoWidgets by
1.8.5