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
など)。このような状況を処理するためのより良い解決策はありますか?