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