我正在尝试研究 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/