# PooledObject<T>

> A pooled object wraps a reference to an instance returned to the pool when the pooled object is disposed of.

## Definition

* **Type:** Struct
* **Namespace:** [UnityEngine.Pool](/engine/6000.7/script-reference/unityengine/pool.md)
* **Assembly:** UnityEngine.CoreModule
* **Implements:** [IDisposable](https://learn.microsoft.com/dotnet/api/system.idisposable)

```csharp
public struct PooledObject<T> : IDisposable where T : class
```

## Remarks

It automates the return of references to avoid manual handling.

The following example shows how to use a PooledObject:

## Examples

```csharp
using UnityEngine;
using UnityEngine.Pool;

public class SpawnAndConfigureOnce : MonoBehaviour
{
    [SerializeField] private GameObject visualPrefab;

    private ObjectPool<GameObject> _pool;

    void Awake()
    {
        _pool = new ObjectPool<GameObject>(
            createFunc: () => Instantiate(visualPrefab),
            actionOnGet: gameObject => gameObject.SetActive(true),
            actionOnRelease: gameObject => gameObject.SetActive(false),
            actionOnDestroy: gameObject => Destroy(gameObject),
            collectionCheck: true,   // An Editor-only check that determines if an instance is returned back to the pool. Throws an exception if the instance is already in the pool.
            defaultCapacity: 10,
            maxSize: 100);
    }

    // Demonstrates synchronous usage: all work finishes before scope ends.
    public void ShowVisualOnce(Vector3 position, Quaternion rotation)
    {
        using (PooledObject<GameObject> pooled = _pool.Get(out GameObject gameObject))
        {
            gameObject.transform.SetPositionAndRotation(position, rotation);

            // Do synchronous work only. Once we leave this scope,
            // the object is automatically returned to the pool.
            // e.g., sampling data, taking a screenshot, etc.
        } // Dispose called here -> gameObject returned to pool
    }
}
```

## Constructors

| Constructor                                                                                                                       | Description                                                                                                   |
| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [PooledObject\`1(\`0,UnityEngine.Pool.IObjectPool\{\`0})](/engine/6000.7/script-reference/unityengine/pool/pooledobject1/ctor.md) | Initializes the pooled object with a managed object and specifies the pool to which the instance is returned. |
