如何将智能指针作为void*传递给函数
How to pass a smart pointer to a function as 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?
根据您的标题,我假设gpointer
实际上是void*
。在这种情况下,我还假设当你说might delete arg when it finish
时,你实际上是指free()
,因为一旦你放弃了原始类型,你就不能保证delete
是合法的。
在这种情况下,在任何情况下都不应该使用智能指针传递给g_timeout_add
调用,因为这可能会导致回调和智能指针都删除同一内存,这是未定义的行为。
您需要决定谁拥有mydata
:调用者、回调方或共享方。然后,基于此,您可以实现调用者/回调代码,以正确地表示这些所有权语义。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何将指针从一个void函数传递到另一个C++
- 为什么全局函数 void showA(A&x) 能够访问 A 类的私有成员?
- 如何将函数<void()>写入管道/套接字对?
- 错误:无法在没有对象的情况下调用成员函数'void Fortest::run()'|
- 标准的大小::函数<void(int&)>类型
- 如何函数<void(字符串消息)>绑定到成员函数?
- 函数void()返回一个值,而不是char或string
- 函数void QQuickWindow::setDefaultAlphaBuffer(bool useAlpha)的用途
- 错误 LNK2019:函数 "void __cdecl Padding(int)" 中引用未解析的外部符号___iob_func
- 我可以有一个~析构函数(void)吗?
- 函数<void(T)> 带有默认参数的参数
- 错误:参数太少,无法函数"void alpha(std::string*,student)"