Here is a pattern I came up with and I tend to use for my objects that can be copied. It’s is pretty simple and that is the point. More robust and useful classes can be defined by adding parameters to the non-standard methods (Create/Clone/Initialize/Destroy) .  The below example is C++. Reader should also use explicit constructors when appropriate. In the below case, defining Foo’s constructor as explicit was unnecessary
class Foo
{
private: Â
void Create()
{
// Create and initialize if RAII.
}
void Clone(const Foo& rSource)
{
// Copy data from rSource to "this"
}
void Initialize()
{
// Initialize object state
}
void Destroy()
{
// Destroy anything created in Create() in reverse order.
}
public:
Foo()
{
Create();
// If RAII (Resource Acquisition Is Initialization)
Initialize();
}
Foo(const Foo& rSource)
{
Create();
Clone();
}
virtual ~Foo()
{
try
{
Destroy();
}
catch(...)
{
}
}
Foo& Foo::operator=(const Foo& rSource)
{
if(this != &rSource)
{
Clone(rSource);
}
return *this;
}
}