我想创建一个QScopedPointer的void与自定义删除器来正确管理来自C库(它只提供void *到其内部数据结构)的资源。 然而,当我尝试实例化一个void QScopedPointer,我得到这个错误:虚空指针到智能指针
/Library/Frameworks/QtCore.framework/Headers/qscopedpointer.h:104:14:
error: cannot form a reference to 'void'
inline T &operator*() const
(from Clang)
或本:
/Library/Frameworks/QtCore.framework/Headers/qscopedpointer.h:104:
error: forming reference to void
(from GCC)
我想专门QScopedPointer或编写与定制删除一个基本范围的指针,但在这两种情况下,我最终都重复了与QScopedPointer中完全相同的代码。
有什么办法可以摆脱(或专门化)该特定功能,以便编译器不再抱怨了吗?
我会写一个自定义scoped-ptr-to-void并将实现委托给QScopedPointer-to-char。 –
创建一个虚拟类型'struct MYDUMMY {}',将'void *'强制转换为'MYDUMMY *',并专注于此。问题将消失。您可能想要为C函数创建内联包装,因此一切都很好。 – Ben
通常你要么知道你正在存储的数据类型(并且可以使用该类型的指针,而不是void),或者不拥有指针(然后范围指针没有识别)。你确定你需要'void *'的范围指针吗? – Lol4t0