Чтобы построить объект, вам нужно знать конкретный класс для использования (как он иначе узнает, какой объем памяти выделить, или какую виртуальную таблицу использовать и т. Д.??).Таким образом, интерфейс не работает при работе с конструкторами, и вы не можете использовать интерфейсы (чисто виртуальные) для обеспечения существования такого конструктора.Когда вы думаете об этом, это естественно, виртуалы работают только тогда, когда у вас есть полиморфный объект, т.е. после создания экземпляра.Любой, кто ссылается на ваш интерфейс IResource, будет когда-либо иметь дело только с созданными объектами и никогда не трогает конструктор.
Вы можете навязать такие ограничения на материал, используя шаблоны, если хотите.Просто вызывая конструктор копирования из шаблонной функции, компилятор будет жаловаться, если встретит создание экземпляра шаблона с использованием типа, который не имеет конструктора копирования.