2016-08-19 91 views
2

库需要二进制数据共享为void *。 要共享的数据有shared_ptr<T>Casting std :: shared_ptr <T> void *

有没有办法将shared_ptr<T>投射到void *

PS:静态铸造不起作用:

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

+0

'static_cast (binData.get());' – JVApen

+0

怎么样?“要共享的二进制数据是什么意思?与谁共享?他们是否保留它的所有权? –

+0

@JVApen,binData的类型是'T',这里是'DataPacket'。 – MSIS

回答

4

你要对这个错误的。你的问题不是“我需要将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* 

千万要小心注意,哑指针这造成不参与共享所有权计划,所以你必须要小心确保对象的生命周期持续只要你需要它。

相关问题