# Creating and destroying a memcached_st

## SYNOPSIS

#include <libmemcached/memcached.h>

  Compile and link with -lmemcached

typedef struct memcached_st memcached_st

memcached_st *memcached_create(memcached_st *ptr)
  Parameters:

    ptr -- pointer to user-allocated `memcached_st` struct or null pointer

  Returns:

    pointer to initialized `memcached_st` struct

void memcached_free(memcached_st *ptr)
  Parameters:

    ptr -- pointer to initialized `memcached_st` struct to destroy and possibly free

memcached_st *memcached_clone(memcached_st *destination, memcached_st *source)
  Parameters:

    - destination -- pointer to user-allocated `memcached_st` struct or null pointer

    - source -- pointer to initialized `memcached_st` struct to copy from

  Returns:

    pointer to newly initialized `destination`, copied from `source`

void memcached_servers_reset(memcached_st *ptr)
  Parameters:

    ptr -- pointer to initialized `memcached_st` struct

## DESCRIPTION

`memcached_create()` is used to create a `memcached_st` structure that will then be used by other `libmemcached` functions to communicate with the server. You should either pass a statically declared `memcached_st` to `memcached_create()` or a NULL. If a NULL passed in then a structure is allocated for you.

Please note, when you write new application use `memcached()` over `memcached_create()`.

`memcached_clone()` is similar to `memcached_create()` but it copies the defaults and list of servers from the source `memcached_st` pointer. If you pass a null as the argument for the source to clone, it is the same as a call to `memcached_create()`. If the destination argument is NULL a `memcached_st` will be allocated for you.

`memcached_servers_reset()` allows you to zero out the list of servers that the `memcached_st` has.

To clean up memory associated with a `memcached_st` structure you should pass it to `memcached_free()` when you are finished using it. `memcached_free()` is the only way to make sure all memory is deallocated when you finish using the structure.

You may wish to avoid using `memcached_create()` or `memcached_clone()` with a stack based allocation. The most common issues related to ABI safety involve heap allocated structures.

## RETURN VALUE

`memcached_create()` returns a pointer to the `memcached_st` that was created (or initialized). On an allocation failure, it returns NULL.

`memcached_clone()` returns a pointer to the `memcached_st` that was created (or initialized). On an allocation failure, it returns NULL.

## SEE ALSO

- memcached(1)

- C/C++ Client Library for memcached