[odb-users] Using std::weak_ptr

Boris Kolpackov boris at codesynthesis.com
Fri Aug 3 10:21:20 EDT 2018


Lukas Barth <lists at tinloaf.de> writes:

> main-odb.cxx:794:43: note:   mismatched types ‘std::weak_ptr<_Tp>’ and
> ‘odb::object_traits<Bar>::pointer_type {aka Bar*}’
>              obj_traits::object_type > (id));
> 
> There are three more candidates which I skipped. The important part: ODB
> tries somewhere to create a std::weak_ptr<Bar> from a Bar *, which is
> obviously not possible. It would have to create it from a
> std::shared_ptr<Bar>. However, the ODB documentation explicitly says one
> should (and in fact must) use std::weak_ptr in these cases.
> 
> What am I doing wrong?

You need to make std::shared_ptr the object pointer for your objects.
See Section 3.3, "Object and View Pointers" for details.

Boris



More information about the odb-users mailing list