c++11 - 将 std::shared_ptr<T> 转换为 void*

标签 c++11

库要求将二进制数据共享为 void * . 要共享的数据可用 shared_ptr<T> .

有没有办法投shared_ptr<T>void *

PS:静态转换不起作用:

error: invalid static_cast from type ‘std::shared_ptr<DataPacket>’ to type ‘void*’ static_cast<void *>(binData);

最佳答案

你的做法是错误的。您的问题不是“我需要将 shared_ptr<T> 解释为 void*”——您的问题是“我有一个指向对象的智能指针,我需要一个指向该对象的哑指针”。

shared_ptr<T>有一个函数正是这样做的

shared_ptr<T> smart;

// ... some code here points smart at an object ...

T *dumb1 = smart.get(); // creates a dumb pointer to the object managed by smart
void *dumb2 = smart.get(); // dumb pointers automatically convert to void*

请注意,此创建的哑指针不参与共享所有权方案,因此您必须注意确保对象的生命周期持续到您需要的时间。

关于c++11 - 将 std::shared_ptr<T> 转换为 void*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044067/

相关文章:

C++ 原子对象无锁保证

c++ - 如何将 std::array 转换为一个点?

c++ - 传入 A::operator new() 的大小是否总是等于 sizeof(A)?

c++ - 允许使用右值捕获但不分配给的运算符重载

c++ - 如何定义自定义跨平台 size_t 类型?

c++ - 有没有办法确定 C++ 编译器实现的语言特性?

c++ - memory_order_relaxed 如何在智能指针中增加原子引用计数?

c++ - 可以优化从临时对象创建复合对象吗?

c++11 - 无法使用 autoconf 启用 C++11

c++ - 为什么与花括号分隔的初始化程序一起使用的缩小转换不会导致错误?