Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
AutoDestroyUserData.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/* AutoDestroyUserData.h (C) 2000-2012 */
9/* */
10/* UserData s'auto-détruisant une fois détaché. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_AUTODESTROYUSERDATA_H
13#define ARCANE_UTILS_AUTODESTROYUSERDATA_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/IUserData.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22ARCANE_BEGIN_NAMESPACE
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27template<typename T>
29{
30 public:
31 static void destroy(T* t){ delete t; }
32};
33
34/*---------------------------------------------------------------------------*/
35/*---------------------------------------------------------------------------*/
36/*!
37 * \brief UserData s'auto-détruisant une fois détaché.
38 * \ingroup Core
39 *
40 * Une instance de cette classe doit être allouée via new()
41 * et est détruite automatiquement ainsi que sa donnée associée lorsqu'elle
42 * est détachée d'un IUserDataList via IUserDataList::removeData().
43 *
44 * Par défaut, elle appelle l'opérateur delete pour sa donnée
45 * mais il est possible de changer son comportement via le
46 * paramètre template DestroyBehaviour.
47 */
48template<typename T,typename DestroyBehaviour = DeleteOnDestroyBehaviour<T> >
50: public IUserData
51{
52 public:
53
54 AutoDestroyUserData(T* adata): m_data(adata){}
55 private:
57 {
58 }
59
60 public:
61
62 virtual void notifyAttach(){}
63
64 virtual void notifyDetach()
65 {
66 DestroyBehaviour::destroy(m_data);
67 m_data = 0;
68 delete this;
69 }
70
71 T* data() { return m_data; }
72
73 private:
74 T* m_data;
75};
76
77/*---------------------------------------------------------------------------*/
78/*---------------------------------------------------------------------------*/
79
80ARCANE_END_NAMESPACE
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85#endif
86
UserData s'auto-détruisant une fois détaché.
virtual void notifyAttach()
Méthode exécutée lorsque l'instance est attachée.
virtual void notifyDetach()
Méthode exécutée lorsque l'instance est détachée.
Interface pour une donnée utilisateur attachée à un autre objet.
Definition IUserData.h:31