PIMPL - отвратительная идиома, и я пришел к выводу, что это скорее анти-паттерн.
Однако, если вы настаиваете на его использовании, вы можете тривиально определить деструктор как пустой в файле реализации, чтобы в полной мере использовать любой умный указатель, который вы хотите использовать для автоматического уничтожения не-POD реализаций.
class Impl;
class Object {
std::unique_ptr<Impl> impl;
public:
//...
~Object();
};
#include "Impl.h"
// in cpp
Object::~Object() {}
Этот быстрый пример кода четко определяет Википедию как совершенно неверную - более чем возможно просто определить деструктор в файле реализации, чтобы использовать любой деструктор, который вы хотите, даже умные указатели, которые требуют полного определения.