不能投无效*

时间:2017-07-24 19:43:14

标签: c++ void-pointers

class MyClass {
    public:
       register_callback(int, void*);
}

typedef boost::shared_ptr<MyClass> myClass_p;

class MyOtherClass {
  public: 
    registerItem(std::pair<std::string, myClass_p>insertItem) {
      auto foo = insertItem.second;
      void *bar = static_cast<void*>(foo);
 }

鉴于上面的代码,为什么我得到“static_cast:无法从myClass_p转换为void *。我认为你可以将任何指针转换为void *。

1 个答案:

答案 0 :(得分:3)

foo不是指针。它是一个对象。该对象恰好是boost::shared_ptr<MyClass>,因此在语义上是一个智能指针。但它不是一个指针。

假设有一个可疑的假设,即你所做的事情是有道理的,你需要:

void *bar = foo.get();

boost::shared_ptr<MyClass>::get()返回指向共享对象的指针(如果为空,则返回nullptr。)