Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
ObjectImpl.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/* ObjectImpl.h (C) 2000-2022 */
9/* */
10/* Classe de base de l'implémentation d'un objet d'Arcane. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_OBJECTIMPL_H
13#define ARCANE_UTILS_OBJECTIMPL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19#include <atomic>
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
35class ARCANE_UTILS_EXPORT ObjectImpl
36{
37 public:
38
40 : m_ref_count(0)
41 {}
42 ObjectImpl(const ObjectImpl& rhs) = delete;
43 virtual ~ObjectImpl() {}
44 ObjectImpl& operator=(const ObjectImpl& rhs) = delete;
45
46 public:
47
49 void addRef() { ++m_ref_count; }
51 void removeRef()
52 {
53 Int32 r = --m_ref_count;
54 if (r < 0)
56 if (r == 0)
57 deleteMe();
58 }
60 Int32 refCount() const { return m_ref_count.load(); }
61
62 public:
63
65 virtual void deleteMe() { delete this; }
66
67 private:
68
69 std::atomic<Int32> m_ref_count;
70};
71
72/*---------------------------------------------------------------------------*/
73/*---------------------------------------------------------------------------*/
74
75} // namespace Arcane
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
79
80#endif
Déclarations des types utilisés dans Arcane.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Classe de base d'un objet avec compteur de référence.
Definition ObjectImpl.h:36
void addRef()
Incrémente le compteur de référence.
Definition ObjectImpl.h:49
Int32 refCount() const
Retourne la valeur du compteur de référence.
Definition ObjectImpl.h:60
void removeRef()
Décrémente le compteur de référence.
Definition ObjectImpl.h:51
virtual void deleteMe()
Détruit cet objet.
Definition ObjectImpl.h:65
std::atomic< Int32 > m_ref_count
Nombre de références sur l'objet.
Definition ObjectImpl.h:69
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void arcaneNoReferenceErrorCallTerminate(const void *ptr)
Utilisation d'un objet non référencé.
Definition Misc.cc:265