Я пытаюсь изучить технику пимпла для C++. После того, как прошел через несколько статей в Интернете, я нашел, что есть два различных способа для Pimpl, одинПреимущество и недостаток использования указателя void в C++ pimpl
class X
{
public:
X(...parameters...)
~X()
private:
struct Impl;
Impl* impl_;
};
Другой способ заключается в использовании сырой пустой указатель, как
class X
{
public:
X(...parameters...)
~X()
private:
void * impl_;
};
Затем использовать static_cast, чтобы бросить указатель void возвращается к исходному типу.
Каковы преимущества и недостатки, сравнивающие эти два способа?
Спасибо!
первый всегда лучше, так как он сохраняет информацию о типе –
Нет смысла использовать указатель на пустоту, только недостатки. Если вы хотите скрыть объявление класса реализации, вместо этого используйте форвардное объявление; что позволит компилятору знать, что класс существует (чтобы вы не получали синтаксическую ошибку), сохраняя при этом все детали, скрытые внутри файла .cpp. –