Copy constructor: deep copying an abstract class
You could add a clone() function to your interface.
You'll have to add that code yourself to the Material copy constructor. Then code to free the allocated IColor in your destructor.
You'll also want to add a virtual destructor to IColor.
The only way to do a deep copy automatically would be to store a color directly instead of a pointer to an IColor.
Take a look at the virtual constructor idiom