Предположим, у вас есть простые объекты, такие как Stormtroopers:
class Stormtrooper
{
char* cstring; // raw pointer used as a handle to a dynamically-allocated memory block
void clone(const char* s)
{
std::size_t n = std::strlen(s) + 1;
cstring = new char[n];
std::memcpy(cstring, s, n); // populate
}
public:
Stormtrooper(const char* s = "I am a Stormtrooper clone") { clone(s); }
~Stormtrooper()
{
delete[] cstring; // deallocate
}
Stormtrooper(const Stormtrooper& other) // copy constructor
{
clone(other.cstring);
}
Stormtrooper& operator=(const Stormtrooper& other) // copy assignment
{
if(this != &other) {
delete[] cstring; // deallocate
clone(other.cstring);
}
return *this;
}
};
Если вы хотите назначить une Stormtrooper другому, полезно проверить, идентичны ли эти два Stormtroopers или нет (как правило, они идентичны) . Таким образом вы избегаете операции clone (), потому что штурмовики уже идентичны.
Но если вы хотите создать нового штурмовика и хотите, чтобы он был идентичен другому штурмовику (как обычно), вы можете скопируйте его, и в этом случае операция clone () будет выполнена правильно.
Таким образом вы можете довольно легко создать целую армию штурмовиков.