void* 可以用static_pointer_cast 转换吗
时间: 2024-06-01 07:09:36 浏览: 10
不可以。
因为 `static_pointer_cast` 是智能指针类型之间的转换,而 `void*` 是指针类型与任何其他指针类型之间的转换。
使用 `static_pointer_cast` 可以将一个指向派生类对象的 `shared_ptr` 转换为指向基类的 `shared_ptr`,但是不能将 `void*` 转换为智能指针类型。如果需要将 `void*` 转换为智能指针类型,可以使用 `reinterpret_pointer_cast` 或 `dynamic_pointer_cast`。
相关问题
dereferencing ‘void *’ pointer
这个错误通常发生在尝试对一个 `void*` 指针进行解引用操作时。`void*` 是一个通用的指针类型,它可以指向任何类型的数据。但是,在使用 `void*` 指针时,需要先将其强制转换为正确的指针类型,然后才能对其进行解引用操作。
例如,假设有一个 `void*` 指针 `p`,指向一个 `int` 类型的变量。要访问该变量,需要将 `p` 强制转换为 `int*` 类型,然后才能对其进行解引用操作,如下所示:
```c++
void* p = /* 指向 int 类型的变量 */;
int* q = static_cast<int*>(p); // 将 void* 转换为 int*
int x = *q; // 解引用 int* 指针,获取其指向的变量的值
```
如果忘记对 `void*` 指针进行强制类型转换,直接对其进行解引用操作,就会出现 "dereferencing 'void *' pointer" 的错误。
sp<android::SurfaceControl>' to pointer type 'void * 的方法
将一个类型为`sp<android::SurfaceControl>`的变量转换为`void*`指针类型的方法如下所示:
```
sp<android::SurfaceControl> surfaceControl = ...; // 初始化SurfaceControl对象
void* ptr = static_cast<void*>(surfaceControl.get()); // 转换为void*指针类型
```
这里使用了`static_cast`操作符将`sp<android::SurfaceControl>`类型的对象转换为`void*`指针类型。`surfaceControl.get()`返回一个指向`SurfaceControl`对象的指针,再用`static_cast`转换为`void*`指针类型,即可得到所需的指针。需要注意的是,`void*`指针类型不是类型安全的,使用时需要格外小心,确保不会出现类型错误。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)