VclPtr some improvements ?

Michael Meeks michael.meeks at collabora.com
Sat May 20 09:40:38 UTC 2017


So,

	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
	  ie.

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


	ScopedVclPtr<Foo> pFoo;
		+ empty VclPtr that is disposed when it goes out of
		  scope.
		+ I guess something like unique_ptr - but with a
		  safe ref-count to the underlying object which can
	 	  survive (in a disposed state) for longer than the
		  scope.
		+ something of a confusing name

	* Suggestion: rename it to VclPtrAutoDispose - longer but
	  perhaps clearer (?) - or something else ?

	ScopedVclPtrInstance<Foo> pFoo( pParent );

	* Suggestion: as above - re-use auto and an:

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

	Thoughts pro & con appreciated before doing the cleanup =) are there
better / more familiar name and approaches ?

	Hopefully using 'auto' would at least kill half of the template
complexity there =)

	ATB,

		Michael.

-- 
michael.meeks at collabora.com <><, Pseudo Engineer, itinerant idiot


More information about the LibreOffice mailing list