Простой ответ: да, это возможно.
Вам нужно только определить выделенный конструктор производной копии, который не вызывает NonCopyable конструктор копирования (конечно, это может сбивать с толку в реальном программном приложении, но этодругая проблема):
Этот класс конструируем, но не копируемо:
class CannotBeCopied: public NonCopyable {};
Этот класс конструируем и также копируемо:
class CanBeCopied: public NonCopyable {
public:
CanBeCopied() = default; // needed since otherwise CopyConstructor is only known construtor
CanBeCopied(const CanBeCopied& b) { } // calls NonCopyable::NonCopyable() default-constructor, which is just protected
};
Смотрите пример жизни здесь: http://coliru.stacked -crooked.com / a / 60c9fc42fa2dd59a