CppCMS
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
booster
clone_ptr.h
1
//
2
// Copyright (C) 2009-2012 Artyom Beilis (Tonkikh)
3
//
4
// Distributed under the Boost Software License, Version 1.0. (See
5
// accompanying file LICENSE_1_0.txt or copy at
6
// http://www.boost.org/LICENSE_1_0.txt)
7
//
8
#ifndef BOOSTER_CLONE_PTR_H
9
#define BOOSTER_CLONE_PTR_H
10
11
namespace
booster {
12
17
template
<
typename
T>
18
class
clone_ptr
{
19
T *ptr_;
20
public
:
21
clone_ptr
() : ptr_(0) {}
22
explicit
clone_ptr
(T *v) : ptr_(v) {}
23
clone_ptr
(
clone_ptr
const
&other) : ptr_(0)
24
{
25
if
(other.ptr_)
26
ptr_=other.ptr_->clone();
27
}
28
clone_ptr
const
&operator=(
clone_ptr
const
&other)
29
{
30
if
(
this
!= &other) {
31
clone_ptr
tmp(other);
32
swap(tmp);
33
}
34
return
*
this
;
35
}
36
~
clone_ptr
() {
37
if
(ptr_)
delete
ptr_;
38
}
39
40
T *
get
()
const
{
return
ptr_; }
41
T &operator *()
const
{
return
*ptr_; }
42
T *operator->()
const
{
return
ptr_; }
43
44
T *release() { T *tmp=ptr_; ptr_=0;
return
tmp; }
45
void
reset(T *p=0)
46
{
47
if
(ptr_)
delete
ptr_;
48
ptr_=p;
49
}
50
void
swap(
clone_ptr
&other)
51
{
52
T *tmp=other.ptr_;
53
other.ptr_=ptr_;
54
ptr_=tmp;
55
}
56
};
57
58
}
// booster
59
60
#endif
booster::clone_ptr
a smart pointer similar to std::auto_ptr but it clones (by calling T::clone()) underlying object on c...
Definition:
clone_ptr.h:18
Generated on Thu Oct 30 2014 14:31:44 for CppCMS by
1.8.6