У меня есть ситуация, когда управляемый объект QSharedPointer
сигнализирует о том, что он выполнил свою задачу и вскоре готов к удалению (после выполнения функция покинула функцию, испускающую мой сигнал readyForDeletion
). При работе с обычными указателями я бы просто вызывал QObject::deleteLater
для объекта, однако это невозможно с экземпляром, управляемым QSharedPointer
. Мой обходной путь следующий:
template<typename T>
class QSharedPointerContainer : public QObject
{
QSharedPointer<T> m_pSharedObj;
public:
QSharedPointerContainer(QSharedPointer<T> pSharedObj)
: m_pSharedObj(pSharedObj)
{} // ==> ctor
}; // ==> QSharedPointerContainer
template<typename T>
void deleteSharedPointerLater(QSharedPointer<T> pSharedObj)
{
(new QSharedPointerContainer<T>(pSharedObj))->deleteLater();
} // ==> deleteSharedPointerLater
Это работает хорошо, однако при использовании этого метода возникает много накладных расходов (выделение нового QObject
и т. д.). Есть ли лучшее решение для таких ситуаций?
readyForDeletion
для любого класса, создающего объект в первую очередь. - person Dave Mateer   schedule 27.09.2012