Я пытаюсь «специализировать» std :: default_delete для QQmlComponent без успеха, моя реализация никогда не вызывается, вызывается только удаление по умолчанию из :: std.Поэтому для целей отладки я создаю еще одну специализацию для QObject, и она называется:
в моем util.hi:
namespace std {
// QQmlComponent often theses objects
// are owned by another thread despite their QQmlEngine::CppOwnership, using delete operator
// directly generate crashes, specify a default_delete specifically for QQmlComponent to
// use a deleteLater() call over a raw delete
template<>
struct default_delete<QQmlComponent> {
void operator()(QQmlComponent* ptr) {
if ( ptr &&
QQmlEngine::objectOwnership(ptr) == QQmlEngine::CppOwnership )
ptr->deleteLater();
}
};
template<>
struct default_delete<QObject> {
void operator()(QObject* ptr) {
///...
};
}
в моем utils.cpp у меня есть:
std::unique_ptr<QObject> testQObject= std::make_unique<QObject>(new QObject());
std::unique_ptr<QQmlComponent> connectorComponent = std::make_unique<QQmlComponent>(engine, QStringLiteral("qrc:/QuickQanava/VisualConnector.qml"));
в testQObject
называется специализированный default_delete
, а не в connectorComponent
Я не понимаю, что я делаю неправильно.Как примечание, этот код реализован в общей библиотеке