:github_url: hide .. _class_RefCounted: RefCounted ========== **Hérite de :** :ref:`Object` **Hérité par :** :ref:`AESContext`, :ref:`AStar2D`, :ref:`AStar3D`, :ref:`AStarGrid2D`, :ref:`AudioEffectInstance`, :ref:`AudioSample`, :ref:`AudioSamplePlayback`, :ref:`AudioStreamPlayback`, :ref:`CameraFeed`, :ref:`CharFXTransform`, :ref:`ConfigFile`, :ref:`Crypto`, :ref:`DirAccess`, :ref:`DTLSServer`, :ref:`EditorContextMenuPlugin`, :ref:`EditorDebuggerPlugin`, :ref:`EditorDebuggerSession`, :ref:`EditorExportPlatform`, :ref:`EditorExportPlugin`, :ref:`EditorExportPreset`, :ref:`EditorFeatureProfile`, :ref:`EditorFileSystemImportFormatSupportQuery`, :ref:`EditorInspectorPlugin`, :ref:`EditorResourceConversionPlugin`, :ref:`EditorResourcePreviewGenerator`, :ref:`EditorResourceTooltipPlugin`, :ref:`EditorSceneFormatImporter`, :ref:`EditorScenePostImport`, :ref:`EditorScenePostImportPlugin`, :ref:`EditorScript`, :ref:`EditorTranslationParserPlugin`, :ref:`EncodedObjectAsID`, :ref:`ENetConnection`, :ref:`EngineProfiler`, :ref:`Expression`, :ref:`FileAccess`, :ref:`GLTFObjectModelProperty`, :ref:`HashingContext`, :ref:`HMACContext`, :ref:`HTTPClient`, :ref:`ImageFormatLoader`, :ref:`JavaClass`, :ref:`JavaObject`, :ref:`JavaScriptObject`, :ref:`KinematicCollision2D`, :ref:`KinematicCollision3D`, :ref:`Lightmapper`, :ref:`Logger`, :ref:`MeshConvexDecompositionSettings`, :ref:`MeshDataTool`, :ref:`MultiplayerAPI`, :ref:`Mutex`, :ref:`NavigationPathQueryParameters2D`, :ref:`NavigationPathQueryParameters3D`, :ref:`NavigationPathQueryResult2D`, :ref:`NavigationPathQueryResult3D`, :ref:`Node3DGizmo`, :ref:`OggPacketSequencePlayback`, :ref:`OpenXRAPIExtension`, :ref:`OpenXRFutureResult`, :ref:`OpenXRSpatialCapabilityConfigurationBaseHeader`, :ref:`OpenXRSpatialComponentData`, :ref:`OpenXRStructureBase`, :ref:`PackedDataContainerRef`, :ref:`PacketPeer`, :ref:`PCKPacker`, :ref:`PhysicsPointQueryParameters2D`, :ref:`PhysicsPointQueryParameters3D`, :ref:`PhysicsRayQueryParameters2D`, :ref:`PhysicsRayQueryParameters3D`, :ref:`PhysicsShapeQueryParameters2D`, :ref:`PhysicsShapeQueryParameters3D`, :ref:`PhysicsTestMotionParameters2D`, :ref:`PhysicsTestMotionParameters3D`, :ref:`PhysicsTestMotionResult2D`, :ref:`PhysicsTestMotionResult3D`, :ref:`RandomNumberGenerator`, :ref:`RDAttachmentFormat`, :ref:`RDFramebufferPass`, :ref:`RDPipelineColorBlendState`, :ref:`RDPipelineColorBlendStateAttachment`, :ref:`RDPipelineDepthStencilState`, :ref:`RDPipelineMultisampleState`, :ref:`RDPipelineRasterizationState`, :ref:`RDPipelineSpecializationConstant`, :ref:`RDSamplerState`, :ref:`RDShaderSource`, :ref:`RDTextureFormat`, :ref:`RDTextureView`, :ref:`RDUniform`, :ref:`RDVertexAttribute`, :ref:`RegEx`, :ref:`RegExMatch`, :ref:`RenderSceneBuffers`, :ref:`RenderSceneBuffersConfiguration`, :ref:`Resource`, :ref:`ResourceFormatLoader`, :ref:`ResourceFormatSaver`, :ref:`ResourceImporter`, :ref:`SceneState`, :ref:`SceneTreeTimer`, :ref:`ScriptBacktrace`, :ref:`Semaphore`, :ref:`SkinReference`, :ref:`SocketServer`, :ref:`StreamPeer`, :ref:`SurfaceTool`, :ref:`TextLine`, :ref:`TextParagraph`, :ref:`TextServer`, :ref:`Thread`, :ref:`TLSOptions`, :ref:`TranslationDomain`, :ref:`TriangleMesh`, :ref:`Tween`, :ref:`Tweener`, :ref:`UDPServer`, :ref:`UPNP`, :ref:`UPNPDevice`, :ref:`WeakRef`, :ref:`WebRTCPeerConnection`, :ref:`XMLParser`, :ref:`XRInterface`, :ref:`XRPose`, :ref:`XRTracker`, :ref:`ZIPPacker`, :ref:`ZIPReader` Classe de base pour les objets avec références comptées. .. rst-class:: classref-introduction-group Description ----------- Classe de base pour tout objet qui conserve un compte de références. :ref:`Resource` et beaucoup d'autres objets d'aide héritent de cette classe. Contrairement aux autres types :ref:`Object`, les **RefCounted**\ s conservent un compteur de référence interne afin qu'ils soient automatiquement libérés lorsqu'ils ne sont plus utilisés, et seulement là. Les **RefCounted**\ s n'ont donc pas besoin d'être libérés manuellement avec :ref:`Object.free()`. Les instances **RefCounted** prises dans une référence cyclique ne seront **pas** automatiquement libérées. Par exemple, si un nœud contient une référence à une instance ``A``, qui contient directement ou indirectement une référence à ``A``, le compte de références de ``A`` sera de 2. La destruction du nœud laissera ``A`` avec un compteur de références de 1, et il y aura une fuite de mémoire. Pour éviter cela, l'une des références du cycle peut être rendue faible avec :ref:`@GlobalScope.weakref()`. Dans la grande majorité des cas d'utilisation, l'instanciation et l'utilisation de types dérivés de **RefCounted** est tout ce que vous devez faire. Les méthodes fournies dans cette classe ne sont que pour les utilisateurs avancés, et peuvent causer des problèmes si mal utilisées. \ **Note :** En C#, les objets avec un compteur de références ne seront pas libérés instantanément après qu'ils ne soient plus utilisés. Au lieu de cela, le ramasse-miette s'exécutera périodiquement et libérera les objets référencés qui ne sont plus utilisés. Cela signifie que les objets non utilisés resteront en mémoire pendant un certain temps avant d'être supprimées. .. rst-class:: classref-introduction-group Tutoriels ------------------ - :doc:`Quand et comment éviter d'utiliser des nœuds pour tout <../tutorials/best_practices/node_alternatives>` .. rst-class:: classref-reftable-group Méthodes ---------------- .. table:: :widths: auto +-------------------------+---------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_reference_count`\ (\ ) |const| | +-------------------------+---------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`init_ref`\ (\ ) | +-------------------------+---------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`reference`\ (\ ) | +-------------------------+---------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`unreference`\ (\ ) | +-------------------------+---------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Descriptions des méthodes -------------------------------------------------- .. _class_RefCounted_method_get_reference_count: .. rst-class:: classref-method :ref:`int` **get_reference_count**\ (\ ) |const| :ref:`🔗` Renvoie le compte de références actuel. .. rst-class:: classref-item-separator ---- .. _class_RefCounted_method_init_ref: .. rst-class:: classref-method :ref:`bool` **init_ref**\ (\ ) :ref:`🔗` Initialise le compteur de références interne. Utilisez ceci seulement si vous savez vraiment ce que vous faites. Renvoie si l'initialisation a été réussie. .. rst-class:: classref-item-separator ---- .. _class_RefCounted_method_reference: .. rst-class:: classref-method :ref:`bool` **reference**\ (\ ) :ref:`🔗` Incrémente le compteur de références interne. Utilisez ceci seulement si vous savez vraiment ce que vous faites. Renvoie ``true`` si l'incrémentation a réussi, ``false`` sinon. .. rst-class:: classref-item-separator ---- .. _class_RefCounted_method_unreference: .. rst-class:: classref-method :ref:`bool` **unreference**\ (\ ) :ref:`🔗` Décrémente le compteur de références interne. Utilisez ceci seulement si vous savez vraiment ce que vous faites. Renvoie ``true`` si l'objet devrait être libéré après la décrémentation, ``false`` sinon. .. |virtual| replace:: :abbr:`virtual (Cette méthode doit typiquement être redéfinie par l'utilisateur pour avoir un effet.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Cette méthode n'a pas d'effets de bord. Elle ne modifie aucune des variables membres de l'instance.)` .. |vararg| replace:: :abbr:`vararg (Cette méthode accepte n'importe quel nombre d'arguments après ceux décris ici.)` .. |constructor| replace:: :abbr:`constructor (Cette méthode est utilisée pour construire un type.)` .. |static| replace:: :abbr:`static (Cette méthode n'a pas besoin d'instance pour être appelée, elle peut donc être directement appelée en utilisant le nom de la classe.)` .. |operator| replace:: :abbr:`operator (Cette méthode décrit un opérateur valide à utiliser avec ce type en tant qu'opérande gauche.)` .. |bitfield| replace:: :abbr:`BitField (Cette valeur est un nombre entier composé d'un masque de bits des options suivantes.)` .. |void| replace:: :abbr:`void (Aucune valeur de retour.)`