void leaky(){ Simple* mySimplePtr = new Simple(); // BUG! Memory is never released! mySimplePtr->go();}
void notLeaky(){ shared_ptr<Simple> mySimpleSmartPtr(new Simple()); mySimpleSmartPtr->go();}
void couldBeLeaky(){ Simple* mySimplePtr = new Simple(); mySimplePtr->go(); delete mySimplePtr;}
Dialog *w = new Dialog();
class QObject2 : public QObject { public: void work() { // Что-то делаем deleteLater(); }}// В одной далёкой-далёкой функции... { std::shared_ptr<QObject> Ptr(new QObject2); Ptr->work(); QApplication::processEvents();}
NonQObject* createObject(){ NonQObject* result = new NonQObject; functionThatCanThrowException(); // может сделать, throw std::runtime_error(), например return result;}
C++ (Qt)QSharedPointer<NonQObject> createObject(){ QSharedPointer<NonQObject> result( new NonQObject ); functionThatCanThrowException(); // может сделать, throw std::runtime_error(), например return result;}
C++ (Qt)typedef QSharedPointer<NonQObject> NonObjectPtr; NonQObjectPtr createObject(){ NonQObjectPtr result( new NonQObject ); functionThatCanThrowException(); // может сделать, throw std::runtime_error(), например return result;}