memory.hpp(3) Library Functions Manual memory.hpp(3)

# [NAME](#NAME)

memory.hpp - Support for types found in &lt;memory&gt;.

# [SYNOPSIS](#SYNOPSIS)

#include 'cereal/cereal.hpp'  
#include &lt;memory&gt;  
#include &lt;cstring&gt;  
#include 'cereal/types/polymorphic.hpp'

## [Classes](#Classes)

struct **cereal::memory\_detail::PtrWrapper&lt; T &gt;**  
A wrapper class to notify cereal that it is ok to serialize the contained pointer. struct **cereal::memory\_detail::LoadAndConstructLoadWrapper&lt; Archive, T &gt;**  
A struct that acts as a wrapper around calling load\_andor\_construct. class **cereal::memory\_detail::EnableSharedStateHelper&lt; T &gt;**

## [Functions](#Functions)

template&lt;class T&gt; **PtrWrapper**&lt; T &gt; **cereal::memory\_detail::make\_ptr\_wrapper** (T &&t)  
Make a **PtrWrapper**. template&lt;class Archive, class T&gt; void **cereal::memory\_detail::loadAndConstructSharedPtr** (Archive &ar, T \*ptr, std::true\_type)  
template&lt;class Archive, class T&gt; void **cereal::memory\_detail::loadAndConstructSharedPtr** (Archive &ar, T \*ptr, std::false\_type)  
template&lt;class Archive, class T&gt; std::enable\_if&lt;!std::is\_polymorphic&lt; T &gt;::value, void &gt;::type **cereal::CEREAL\_SAVE\_FUNCTION\_NAME** (Archive &ar, std::shared\_ptr&lt; T &gt; const &ptr)  
Saving std::shared\_ptr for non polymorphic types. template&lt;class Archive, class T&gt; std::enable\_if&lt;!std::is\_polymorphic&lt; T &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, std::shared\_ptr&lt; T &gt; &ptr)  
Loading std::shared\_ptr, case when no user load and construct for non polymorphic types. template&lt;class Archive, class T&gt; std::enable\_if&lt;!std::is\_polymorphic&lt; T &gt;::value, void &gt;::type **cereal::CEREAL\_SAVE\_FUNCTION\_NAME** (Archive &ar, std::weak\_ptr&lt; T &gt; const &ptr)  
Saving std::weak\_ptr for non polymorphic types. template&lt;class Archive, class T&gt; std::enable\_if&lt;!std::is\_polymorphic&lt; T &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, std::weak\_ptr&lt; T &gt; &ptr)  
Loading std::weak\_ptr for non polymorphic types. template&lt;class Archive, class T, class D&gt; std::enable\_if&lt;!std::is\_polymorphic&lt; T &gt;::value, void &gt;::type **cereal::CEREAL\_SAVE\_FUNCTION\_NAME** (Archive &ar, std::unique\_ptr&lt; T, D &gt; const &ptr)  
Saving std::unique\_ptr for non polymorphic types. template&lt;class Archive, class T, class D&gt; std::enable\_if&lt;!std::is\_polymorphic&lt; T &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, std::unique\_ptr&lt; T, D &gt; &ptr)  
Loading std::unique\_ptr, case when user provides load\_and\_construct for non polymorphic types. template&lt;class Archive, class T&gt; void **cereal::CEREAL\_SAVE\_FUNCTION\_NAME** (Archive &ar, **memory\_detail::PtrWrapper**&lt; std::shared\_ptr&lt; T &gt; const & &gt; const &wrapper)  
Saving std::shared\_ptr (wrapper implementation). template&lt;class Archive, class T&gt; std::enable\_if&lt; **traits::has\_load\_and\_construct**&lt; T, Archive &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, **memory\_detail::PtrWrapper**&lt; std::shared\_ptr&lt; T &gt; & &gt; &wrapper)  
Loading std::shared\_ptr, case when user load and construct (wrapper implementation). template&lt;class Archive, class T&gt; std::enable\_if&lt;!**traits::has\_load\_and\_construct**&lt; T, Archive &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, **memory\_detail::PtrWrapper**&lt; std::shared\_ptr&lt; T &gt; & &gt; &wrapper)  
Loading std::shared\_ptr, case when no user load and construct (wrapper implementation). template&lt;class Archive, class T, class D&gt; void **cereal::CEREAL\_SAVE\_FUNCTION\_NAME** (Archive &ar, **memory\_detail::PtrWrapper**&lt; std::unique\_ptr&lt; T, D &gt; const & &gt; const &wrapper)  
Saving std::unique\_ptr (wrapper implementation). template&lt;class Archive, class T, class D&gt; std::enable\_if&lt; **traits::has\_load\_and\_construct**&lt; T, Archive &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, **memory\_detail::PtrWrapper**&lt; std::unique\_ptr&lt; T, D &gt; & &gt; &wrapper)  
Loading std::unique\_ptr, case when user provides load\_and\_construct (wrapper implementation). template&lt;class Archive, class T, class D&gt; std::enable\_if&lt;!**traits::has\_load\_and\_construct**&lt; T, Archive &gt;::value, void &gt;::type **cereal::CEREAL\_LOAD\_FUNCTION\_NAME** (Archive &ar, **memory\_detail::PtrWrapper**&lt; std::unique\_ptr&lt; T, D &gt; & &gt; &wrapper)  
Loading std::unique\_ptr, case when no load\_and\_construct (wrapper implementation).

# [Detailed Description](#Detailed_Description)

Support for types found in &lt;memory&gt;.

# [Function Documentation](#Function_Documentation)

## [template&lt;class Archive, class T&gt; void cereal::memory\_detail::loadAndConstructSharedPtr (Archive & ar, T * ptr, std::false\_type ) \[inline\]](#template_class_Archive,_class_T__void_cereal::memory_detail::loadAndConstructSharedPtr_%28Archive_&_ar,_T_*_ptr,_std::false_type_%29)

Performs loading and construction for a shared pointer that is NOT derived from std::enable\_shared\_from\_this

This is the typical case, where we simply pass the load wrapper to the archive.

**Parameters**

*ar* The archive  
*ptr* Raw pointer held by the shared\_ptr

## [template&lt;class Archive, class T&gt; void cereal::memory\_detail::loadAndConstructSharedPtr (Archive & ar, T * ptr, std::true\_type ) \[inline\]](#template_class_Archive,_class_T__void_cereal::memory_detail::loadAndConstructSharedPtr_%28Archive_&_ar,_T_*_ptr,_std::true_type_%29)

Performs loading and construction for a shared pointer that is derived from std::enable\_shared\_from\_this

**Parameters**

*ar* The archive  
*ptr* Raw pointer held by the shared\_ptr

# [Author](#Author)

Generated automatically by Doxygen for cereal from the source code.

Sat Aug 29 2026 00:42:30 cereal

---

Document: memory.hpp(3) from cereal 1.3.2-r5 (Chainguard OS)
Source: https://github.com/USCiLab/cereal
