pimpl management good practice

I’d recommend 4th:

////-------------------------
/// vtkClass.h

#include <memory> // for std::unique_ptr

class vtkClass : public vtkObject
{

private:
  class vtkInternals;
  std::unique_ptr<vtkInternals> Internals;
}

////-------------------------
/// vtkClass.cpp
class vtkClass::vtkInternals
{
public:
...
};

vtkClass::vtkClass()
  : Internals(new vtkClass::vtkInternals())
{
}

vtkClass::~vtkClass() = default;

BTW, your #3 is incomplete. You’d need vtkStandardNewMacro(...) etc. for vtkInternals which IMO just is an overkill.

4 Likes