[Interest] Proper use of SharedPointer/WeakPointer
scorp1us at yahoo.com
Thu Feb 23 15:40:29 CET 2012
Hrm, my objects *do* have parents, and when the parent goes, the children need to go too. How is that resolved?
From: André Somers <andre at familiesomers.nl>
To: interest at qt-project.org
Sent: Thursday, February 23, 2012 9:37 AM
Subject: Re: [Interest] Proper use of SharedPointer/WeakPointer
Op 23-2-2012 15:29, Thiago Macieira schreef:
> On quinta-feira, 23 de fevereiro de 2012 06.26.19, Jason H wrote:
>> So in a return-everything query function, it would look like:
>> QList<QSharedPointer<QObject*> > ObjectDatabase::returnAll()
>> QList<QSharedPointer<QObject*> > results;
>> foreach (const obj, m_pObjects)
>> results<< QSharedPointer(obj);
>> return results;
> It is something like this:
> QList<QSharedPointer<QObject*> > ObjectDatabase::returnAll()
> return m_pObjects;
> You must already have those objects in QSharedPointer somewhere. Otherwise
> QSharedPointer *will* delete them.
Also, to make the whole thing a bit more readable, I prefer to define
typedefs for all classes that I use as a shared pointer. I postfix SPtr
to the name of the class for the shared pointer version, but that's a
matter of preference. I guess some convention would be good.
Thiago's advice is good though: if you use smart pointers, make sure you
use them everwhere, especially for shared pointers. Any place where you
see something else besides a new inside the constructor of a shared
pointer, you know you have a problem. So:
MyClassSPtr obj = MyClassSPtr(new MyClass); //ok
MyClassSPtr obj2 = MyClassSptr(someRawMyClassPtr); // ALERT! Trouble
about to happen!
Also, beware of QSharedPointer lifetime management interfering with
QObject lifetime management. IMO, shared pointers of QObjects better
*not* have parents:
MyClassSPtr obj3 = MyClassSPtr(new MyClass(parentQObject); //could spell
Interest mailing list
Interest at qt-project.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Interest