Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ScopedPtr.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* ScopedPtr.h (C) 2000-2006 */
9/* */
10/* Encapsulation d'un pointeur qui se détruit automatiquement. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_SCOPEDPTR_H
13#define ARCANE_UTILS_SCOPEDPTR_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Ptr.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22ARCANE_BEGIN_NAMESPACE
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26/*!
27 * \ingroup Core
28 * \brief Encapsulation d'un pointeur qui se détruit automatiquement.
29 *
30 Cette classe encapsule un pointeur sur un objet qui sera détruit (par
31 l'intermédiaire de l'opérateur delete) lorsque l'instance de cette classe
32 devient hors de portée.
33
34 Cette classe est utile pour être sur qu'un objet sera désalloué même dans
35 le cas où une exception survient.
36
37 \since 0.4.40
38 \author Gilles Grospellier
39 \date 16/07/2001
40 */
41template<class T>
43: public PtrT<T>
44{
45 public:
46
47 //! Type de la classe de base
49
50 public:
51
52 //! Construit une instance sans référence
54
55 //! Construit une instance référant \a t
56 explicit ScopedPtrT(T* t) : BaseClass(t) {}
57
58 //! Détruit l'objet référencé.
59 ~ScopedPtrT() { delete this->m_value; }
60
61 public:
62
63 //! Opérateur de copie
65 {
66 if (this!=&from){
67 delete this->m_value;
68 BaseClass::operator=(from);
69 }
70 return (*this);
71 }
72
73 //! Affecte à l'instance la value \a new_value
74 const ScopedPtrT<T>& operator=(T* new_value)
75 {
76 if (this->m_value!=new_value){
77 delete this->m_value;
78 this->m_value = new_value;
79 }
80 return (*this);
81 }
82};
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
86
87ARCANE_END_NAMESPACE
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92#endif
93
Encapsulation d'un pointeur.
Definition Ptr.h:45
Encapsulation d'un pointeur qui se détruit automatiquement.
Definition ScopedPtr.h:44
const ScopedPtrT< T > & operator=(const ScopedPtrT< T > &from)
Opérateur de copie.
Definition ScopedPtr.h:64
ScopedPtrT()
Construit une instance sans référence.
Definition ScopedPtr.h:53
~ScopedPtrT()
Détruit l'objet référencé.
Definition ScopedPtr.h:59
const ScopedPtrT< T > & operator=(T *new_value)
Affecte à l'instance la value new_value.
Definition ScopedPtr.h:74
PtrT< T > BaseClass
Type de la classe de base.
Definition ScopedPtr.h:48
ScopedPtrT(T *t)
Construit une instance référant t.
Definition ScopedPtr.h:56