Есть некоторые функции, используя void *
как их параметры, как передать в этом случае умный указатель?Как передать умный указатель на функцию как void *?
Например, у меня есть
gboolean callback(gpointer arg); // might delete arg when it finish
A *mydata = new A();
gpointer parg = (gpointer)mydata;
g_timeout_add(100, callback, parg);
Что делать, если я использую смарт-указатель здесь:
std::shared_ptr<A> mydata(new A());
Как преобразовать его в арг из g_timeout_add(.., void*)
?
'mydata.get()'. – 0x499602D2
Если обратный вызов удаляет ваш указатель, тогда у вас возникают проблемы. –
Убедитесь, что вы никогда не передаете указатель на функцию, которая может удалить указатель. Когда умный указатель будет уничтожен, он также удалит указатель, который является неопределенным поведением. –