Во-первых, если вы хотите сделать свой класс полностью не копируемым, не используйте конструктор личных копий и оператор присваивания. Иначе все еще возможно, что часть кода, у которой есть доступ (метод или друг), может молча делать копии. Без реализации вы получите ошибку компоновщика.
Однако, ошибка компилятора была бы предпочтительнее, так как вы узнаете об ошибке быстрее. Для этого есть boost::noncopyable
, или вы можете наследовать от базового класса, который скрывает его конструктор копирования и оператор присваивания.
Относительно конструктора по умолчанию: компилятор не сгенерирует его, если вы вообще объявите какой-либо конструктор. Как правило, нет необходимости скрывать это.