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; >> } >> >> Yes? > No. > > 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 big trouble! André _______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest