簡體   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