On Wed, 21 Nov 2018 at 20:58, Ferguson, Neil D CTR (US) via Boost-users <boost-users@lists.boost.org> wrote:
Sirs and madams,
I hope to use boost interprocess shared memory to pass complex and dynamic data structures between processes on a host efficiently.  The structures will be comprised only of simple primitives (int, float, etc.), interprocess basic_string,  interprocess containers (vectors and maps), containers of containers, and (possible deal killer) boost::any.  From the interprocess documentation, it _looks_ like the preceding is doable, aside from boost::any.  The boost::any objects will themselves contain only primitives, basic_string, or interprocess vectors of unsigned char.    So it _looks_ like the data held by the any should be okay.  My question:  does boost::any use pointers, references, or other constructs that preclude the class from working in shared memory?
Thanks for your advice.
Neil Ferguson

Take a look at /usr/include/boost/any.hpp . You will see that the actual content of the any object is a pointer created with `new` and cleaned up with `delete`. So this will not work properly in shared memory.

You could consider using std::variant instead, which does not put storage on the heap (unless contained objects do it themselves, of course).

Kind regards,
Maarten de Vries