Is this a correct Factory Method implementation?
Don't use dynamic allocation if automatic objects will do:

unique_ptr&lt;Factory&gt; win7fact(new Win7Factory);
unique_ptr&lt;Factory&gt; win8fact(new Win8Factory);


Should be:

Win7Factory win7fact;
Win8Factory win8fact;