On 20/05/17 11:40, Michael Meeks wrote:
        Julien had some good ideas for simplifying VclPtr usage; here is the
background - currently we have:

        VclPtr<Foo> pFoo;
                + empty VclPtr pointer eg. shared_ptr<Foo> xFoo;

        VclPtrInstance<Foo> pFoo( pParent );
                + creates a pFoo as above, and initializes it to an
                  instance; we can't expose 'new Foo()' publicly due
                  to the odd reference counting behavior. ::Create
                  is a little like make_shared
                + sementically this is:
                  VclPtr<Foo> pFoo = VclPtr<Foo>::Create( pParent );

        * Suggestion - lets kill VclPtrInstance in a world with
          'auto' its main use of saving a bit of typing is gone

                auto pFoo = VclPtr<Foo>::Create( pParent );

One more argument supporting that, <https://cgit.freedesktop.org/libreoffice/core/commit/?id=74b6e61dde64c5e24bffacda6f67dbf3d1fc7032> "-Werror,-Wreturn-std-move (recent Clang trunk)":

"An explicit std::move would be needed in the return statements, as there's a conversion from VclPtrInstance to base class VclPtr involved. One more reason to better get rid of VclPtrInstance completely in favor of VclPtr::Create, as already mentioned in [this mail thread]."
LibreOffice mailing list

Reply via email to