boost :: unsafe_any_cast为空时无效的非null指针?

时间:2018-06-26 06:50:30

标签: c++ boost void-pointers boost-any

我有一段代码,其中我使用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指向实例化类的指针。任何其他解决方案都很好。

1 个答案:

答案 0 :(得分:2)

任何演员可能都不安全,仅对非空演员有效。这是不安全且未经检查的。

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