我正在尝试研究C ++的pimpl技术。在网上浏览了一些文章之后,我发现有两种不同的方法可以用于pimpl,一种是

class X
{
  public:
    X(...parameters...)
    ~X()
  private:
    struct Impl;
    Impl* impl_;
};


另一种方法是使用原始的空指针,例如

class X
{
  public:
    X(...parameters...)
    ~X()
  private:
    void * impl_;
};


然后使用static_cast将void指针强制转换回原始类型。

比较这两种方式的优缺点是什么?

谢谢!

最佳答案

请勿使用void*来实现pimpl,或执行任何其他操作。它没有任何好处;并存在一个潜在的问题,如果您由于某种原因将static_cast键入错误的类型,您将拥有不确定的行为。

就像在第一个示例中一样,很容易向前声明您的实现类。那是实现pimpl的正确方法。

关于c++ - 在C++ Pimpl中使用void指针的优缺点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35354511/

10-11 20:19