繁体   English   中英

指向void的指针到智能指针

[英]pointer to void into smart pointer

我正在尝试使用自定义删除器创建一个void的QScopedPointer来正确管理来自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中完全相同的代码。

有什么方法可以摆脱(或专门化)特定的功能,以便编译器不再抱怨?

没有。没有办法编写这个函数,这样就不会让编译器失去理智。 你应该问问自己,无论如何它会有什么意义。 一个指向void的智能指针怎么能做一些与void *本身无关的事情?

void * vptr; *vptr = ??;  ?? = *vptr;  f(*vptr);

这些陈述都没有任何意义。

void *类型是一种非常特殊的类型,用于在C中提供不透明的类型。您可以在C ++中使用它,但通常您不想这样做。 我有一种感觉,无论你想做什么,都有更好的方法。

如果你真的需要一个聪明的不透明指针类型,你必须做它,你将不得不省略解除引用功能。

让我感到惊讶的是,C ++编译器需要不编译未使用的模板的成员函数。 这将向我表明您实际上是在尝试取消引用void指针。 你不能这样做。 如果你想要指针出智能指针,你可以使用get()。 我确定QScopedPointer或具有类似功能的任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM