std :: unique_ptr和QObject :: deleteLater

Ale*_*lev 7 qt c++11

我希望我的std :: unique_ptr调用QObject :: deleteLater来破坏对象.

我无法弄清楚该怎么做.

我没有尝试编译.

例如

std::unique_ptr<SomeQObject, decltype(&QObject::deleteLater)> var(
                pointer, &QObject::deleteLater);
Run Code Online (Sandbox Code Playgroud)

请帮忙...

添加#1.

好的,我发现这有效:

std::unique_ptr<QObject, decltype(std::mem_fun(&QObject::deleteLater))> var(
            pointer,
            std::mem_fun(&QObject::deleteLater));
Run Code Online (Sandbox Code Playgroud)

而不是这一个:

std::unique_ptr<QObject, decltype(&QObject::deleteLater)> var(
            pointer,
            QObject::deleteLater);
Run Code Online (Sandbox Code Playgroud)

但是使用它对我来说太难看了.有好办法吗?

pep*_*ppe 11

顺便说一下,它非常简单直接.

struct QObjectDeleteLater {
    void operator()(QObject *o) {
        o->deleteLater();
    }
};

template<typename T>
using qobject_delete_later_unique_ptr = std::unique_ptr<T, QObjectDeleteLater>;
Run Code Online (Sandbox Code Playgroud)

用法:

qobject_delete_later_unique_ptr<QObject> ptr(new QFooBar);
Run Code Online (Sandbox Code Playgroud)

如果你能拿出明智的名字,可以获得奖励积分......