7#include <gtest/gtest.h>
9#include "arccore/base/ReferenceCounter.h"
21 bool is_destroyed =
false;
26 bool checkValid(
int nb_call)
29 std::cout <<
"Bad nb_add n=" << nb_add <<
" expected=" << nb_call <<
"\n";
32 if (nb_remove!=nb_call){
33 std::cout <<
"Bad nb_remove n=" << nb_remove <<
" expected=" << nb_call <<
"\n";
48 Simple1(StatInfo* stat_info) : m_nb_ref(0), m_stat_info(stat_info){}
49 ~Simple1(){ m_stat_info->is_destroyed =
true; }
54 ++m_stat_info->nb_add;
55 std::cout <<
"ADD REFERENCE r=" << m_nb_ref <<
"\n";
57 void removeReference()
60 ++m_stat_info->nb_remove;
61 std::cout <<
"REMOVE REFERENCE r=" << m_nb_ref <<
"\n";
63 std::cout <<
"DESTROY!\n";
68 StatInfo* m_stat_info;
74 Simple2(StatInfo* stat_info) : m_stat_info(stat_info){}
75 ~Simple2(){ m_stat_info->is_destroyed =
true; }
77 StatInfo* m_stat_info;
83template<
typename RefType>
void
84_doTest1(
const RefType& ref_type)
107 _doTest1(Simple1Reference(
new Simple1(&stat_info)));
108 ASSERT_TRUE(stat_info.checkValid(4)) <<
"Bad destroy1";
120 ASSERT_TRUE(stat_info.checkValid(4)) <<
"Bad destroy2";
124 _doTest1(createRef<Simple2>(&stat_info));
125 ASSERT_TRUE(stat_info.checkValid(0)) <<
"Bad destroy3";
138 ARCCORE_DECLARE_REFERENCE_COUNTED_INCLASS_METHODS();
143 virtual bool func1() = 0;
144 virtual void func2() = 0;
153 ARCCORE_DEFINE_REFERENCE_COUNTED_INCLASS_METHODS();
157 bool func1()
override {
return true; }
158 void func2()
override {}
162 Int32 m_padding4 = 0;
163 Int64 m_padding3 = 0;
174 using namespace Test1;
204 catch(
const std::exception& ex){
205 std::cerr <<
"Exception ex=" << ex.what() <<
"\n";
#define ASSERT_FALSE(condition)
Vérifie que condition est faux.
#define ASSERT_TRUE(condition)
Vérifie que condition est vrai.
Gestion des références à une classe C++.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Gestion des références sur un objet externe.
Référence à une instance.
static ThatClass createWithHandle(InstanceType *t, Internal::ExternalRef handle)
Créé une référence à partir d'une instance ayant une référence externe.
void reset()
Positionne l'instance au pointeur nul.
Implémentation thread-safe d'un compteur de référence.
Encapsulation d'un pointeur avec compteur de référence.
Espace de nom de Arccore.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
std::int32_t Int32
Type entier signé sur 32 bits.
Structure servant à tagger les interfaces/classes qui utilisent un compteur de référence interne.