我有一段代码,其中使用boost::unsafe_any_cast<void*>(&boost::any anyInstance)获取boost::any对象的内容指针。
代码如下:

boost::any staticResult;  //contains a private pointer called content
f(staticResult);          //makes the content pointer a null pointer
void* voidStaticResult = boost::unsafe_any_cast<void*>(&staticResult);


不幸的是,调试时,我看到staticResult中的内容指针为NULL(0x00000000),而voidStaticResult为0x00000004。

(显然没有理由。您有任何想法吗?)

编辑:函数f()调用创建对象实例的dll。该实例由staticResult的内容指针指向。我需要将指针传递给另一个函数,但是在我看来,没有简单的方法可以“广播” boost :: any指向实例化类的指针。任何其他解决方案都很好。

最佳答案

可能不安全的任何强制转换仅对非空的任何有效。这是不安全且未经检查的。

通常将any实施为内存块的指针,该内存块中有一个vtable,后跟对象实例。因此,要获取指向该对象的指针,请在构建的任何内部指针4上添加sizeof(vtable ptr)。

关于c++ - boost::unsafe_any_cast为空时无效的非null指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51036532/

10-17 01:33