SmartPimpl - changing m_pImpl from a raw pointer to `std::shared_ptr`