BB
Size: a a a
BB
RG
D
RG
D
D
BB
qDebug() << QSslSocket::supportsSsl() << QSslSocket::sslLibraryBuildVersionString() << QSslSocket::sslLibraryVersionString();
SE
E
I
СС
O
this
, переданный в лямбду, становится невалиден. Вызов переданной лямбды делается таким образом:template<typename... Args>
void call_impl(Args&&... args) const
{
QMetaObject::invokeMethod(
context,
[this, args = std::tuple(std::forward<Args>(args)...)]() mutable {
std::apply(callback, std::move(args));
},
Qt::ConnectionType::QueuedConnection);
}
context
в данном случае — это QAbstractEventDispatcher*
, я его получаю через QAbstractEventDispatcher::instance();
однократно при создании моего объекта.std::apply(callback, std::tuple(std::forward<Args>(args)...));
исправляет падение, но я не очень понимаю, в какую сторону дальше копать в поисках причины. std::move
или std::forward
. Форвард аргументов шёл так или иначе до конструктора std::tuple
, где выполнял всё нужное от него. Дальше сам std::tuple
внутри захвата лямбды уже стал rvalue, где, его можно было мувать без проблем, это уже не оригинальные аргументы, пришедшие внутрь функции, с ними мы можем делать что хотим и мув — единственный разумный вариант.E
O
std::move
или std::forward
. Форвард аргументов шёл так или иначе до конструктора std::tuple
, где выполнял всё нужное от него. Дальше сам std::tuple
внутри захвата лямбды уже стал rvalue, где, его можно было мувать без проблем, это уже не оригинальные аргументы, пришедшие внутрь функции, с ними мы можем делать что хотим и мув — единственный разумный вариант.СС
E