有一些函數使用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*)
ARG?
'mydata.get()'。 – 0x499602D2
如果回調刪除了你的指針,那麼你有麻煩了。 –
確保您永遠不會將指針傳遞給可能會刪除指針的函數。當智能指針被破壞時,它也會刪除指針,這是未定義的行爲。 –