Currently I'm using some functions from the glib library. With glib also comes the gio. glib is a C library and therefore I need to delete some structures that I create.

for many of the objects I create a smartpointer eg:

```
std::shared_ptr<GAsyncQueue> my_queue = std::shared_ptr<GAsyncQueue>(g_async_queue_create(), g_async_queue_unref);

```

For this creates a shared pointer to an `GAsyncQueue` and this is safely destroys the queue on its end of its life.

However, I encounter a problem when I obtain a pointer from the gio library that I should not free. In the following code `my_connection` is a GSocketClient which implements (in glib speak) GIOStream.

```
std::shared_ptr<GInputStream> my_input_stream = 
     std::shared_ptr<GInputStream> (
        g_io_stream_get_input_stream(G_IO_STREAM(my_connection.get()))
     );

```

Because the documentation on GIOStream mentions, that the pointer obtained with `g_io_stream_get_input_stream()` should not be freed. That is because it is owned by the `my_connection` instance.
I thought about creating a lamda for the destroy object, the second parameter of a shared pointer object. eg `auto deleter = [](GInputStream* ptr) {};` and then give that lambda as destroy function to the shared pointer, but that feels a kind of stupid.