Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

RefCounted

继承: Object

派生: AESContext, AStar2D, AStar3D, AStarGrid2D, AudioEffectInstance, AudioStreamPlayback, CameraFeed, CharFXTransform, ConfigFile, Crypto, DirAccess, DTLSServer, EditorDebuggerPlugin, EditorDebuggerSession, EditorExportPlatform, EditorExportPlugin, EditorFeatureProfile, EditorFileSystemImportFormatSupportQuery, EditorInspectorPlugin, EditorResourceConversionPlugin, EditorResourcePreviewGenerator, EditorResourceTooltipPlugin, EditorSceneFormatImporter, EditorScenePostImport, EditorScenePostImportPlugin, EditorScript, EditorTranslationParserPlugin, EncodedObjectAsID, ENetConnection, EngineProfiler, Expression, FileAccess, HashingContext, HMACContext, HTTPClient, ImageFormatLoader, JavaClass, JavaScriptObject, KinematicCollision2D, KinematicCollision3D, Lightmapper, MeshConvexDecompositionSettings, MeshDataTool, MultiplayerAPI, Mutex, NavigationPathQueryParameters2D, NavigationPathQueryParameters3D, NavigationPathQueryResult2D, NavigationPathQueryResult3D, Node3DGizmo, OggPacketSequencePlayback, OpenXRAPIExtension, PackedDataContainerRef, PacketPeer, PCKPacker, PhysicsPointQueryParameters2D, PhysicsPointQueryParameters3D, PhysicsRayQueryParameters2D, PhysicsRayQueryParameters3D, PhysicsShapeQueryParameters2D, PhysicsShapeQueryParameters3D, PhysicsTestMotionParameters2D, PhysicsTestMotionParameters3D, PhysicsTestMotionResult2D, PhysicsTestMotionResult3D, RandomNumberGenerator, RDAttachmentFormat, RDFramebufferPass, RDPipelineColorBlendState, RDPipelineColorBlendStateAttachment, RDPipelineDepthStencilState, RDPipelineMultisampleState, RDPipelineRasterizationState, RDPipelineSpecializationConstant, RDSamplerState, RDShaderSource, RDTextureFormat, RDTextureView, RDUniform, RDVertexAttribute, RegEx, RegExMatch, RenderSceneBuffers, RenderSceneBuffersConfiguration, Resource, ResourceFormatLoader, ResourceFormatSaver, ResourceImporter, SceneState, SceneTreeTimer, Semaphore, SkinReference, StreamPeer, SurfaceTool, TCPServer, TextLine, TextParagraph, TextServer, Thread, TLSOptions, TriangleMesh, Tween, Tweener, UDPServer, UPNP, UPNPDevice, WeakRef, WebRTCPeerConnection, XMLParser, XRInterface, XRPose, XRPositionalTracker, ZIPPacker, ZIPReader

引用计数对象的基类。

描述

所有保持引用计数的对象的基类。Resource 和许多其他辅助对象继承该类。

与其他 Object 类型不同,RefCounted 保留一个内部引用计数器,以便它们在不再使用时自动释放,并且仅在那时才会如此。因此,RefCounted 不需要使用 Object.free 手动释放。

陷入循环引用的 RefCounted 实例将不会自动释放。例如,如果节点持有对实例 A 的引用,而该实例直接或间接持有对 A 的引用,则 A 的引用计数将为 2。该节点的销毁将使 A 悬空,引用计数为 1,并且会出现内存泄漏。为了防止这种情况,可以使用 @GlobalScope.weakref 将循环中的引用之一设置为弱引用。

在绝大多数用例中,只需实例化和使用 RefCounted 派生类型即可。该类中提供的方法仅适用于高级用户,如果使用不当可能会导致问题。

注意:在 C# 中,引用计数的对象在不再使用后不会立即被释放。相反,垃圾收集将定期运行,并释放不再使用的引用计数对象。这意味着未使用的引用计数对象会在被移除之前停留一段时间。

教程

方法

int

get_reference_count ( ) const

bool

init_ref ( )

bool

reference ( )

bool

unreference ( )


方法说明

int get_reference_count ( ) const

返回当前的引用计数。


bool init_ref ( )

初始化内部引用计数器。只有在你真的知道你在做什么的时候才使用这个。

返回初始化是否成功。


bool reference ( )

内部引用增量计数器。只有在你真的知道你在做什么的时候才使用这个。

如果增量成功,返回 true,否则返回 false


bool unreference ( )

内部引用减量计数器。只有在你真的知道你在做什么的时候才使用这个。

如果该对象在递减后应被释放,则返回 true,否则返回 false