c++ - C++ pimpl中使用void指针的优缺点

标签 c++ pimpl-idiom

我正在尝试研究 C++ 的 pimpl 技术。看了网上的一些文章,发现pimpl有两种不同的方式,一种是

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

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

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/

相关文章:

c++ - Apache Thrift : difference between byte and binary types

c++ - Mat结构和memcpy的问题

qt - QImage 写入时复制

c++ - 如何使用 Loki 的 Pimpl 实现?

c++ - 创建没有图形的边缘描述符

c++ - 让角色看着玩家?

c++ - std::declval() 在 GCC 中触发断言错误并发出警告

c++ - 如何避免在这个特定的类层次结构设计中向下转型?

C++:带有删除器的类的前向声明,用于可重复的唯一指针