# GenericPool<T>

> Provides a static implementation of ObjectPool<T>.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.Pool](/engine/6000.5/script-reference/unityengine/pool.md)
* **Assembly:** UnityEngine.CoreModule

```csharp
public class GenericPool<T> where T : class, new()
```

## Remarks

The GenericPool has collection checks enabled that ensure that when an instance is released it is not already in the pool. Note this is not thread-safe. Additional Resources: [UnsafeGenericPool\<T>](/engine/6000.5/script-reference/unityengine/pool/unsafegenericpool1.md).

## Examples

```csharp
using UnityEngine.Pool;

public class GenericPoolExample
{
    class MyClass
    {
        public int someValue;
        public string someString;
    }

    void GetPooled()
    {
        // Get an instance
        var instance = GenericPool<MyClass>.Get();

        // Return the instance
        GenericPool<MyClass>.Release(instance);
    }
}
```

## Static Methods

| Method                                                                              | Description                                                                              |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| [Get](/engine/6000.5/script-reference/unityengine/pool/genericpool1/get.md)         | Get an instance from the pool. If the pool is empty then a new instance will be created. |
| [Release](/engine/6000.5/script-reference/unityengine/pool/genericpool1/release.md) | Returns the instance back to the pool.                                                   |
