Dans ma quête pour apprendre le C++, je suis tombé sur l'article de l'Écriture de Copie des Constructeurs et des Opérateurs d'Affectation , qui propose un mécanisme pour éviter la duplication de code à travers copie des constructeurs et des opérateurs d'affectation.
Pour résumer/dupliquer le contenu de ce lien, le mécanisme proposé est:
struct UtilityClass
{
...
UtilityClass(UtilityClass const &rhs)
: data_(new int(*rhs_.data_))
{
// nothing left to do here
}
UtilityClass &operator=(UtilityClass const &rhs)
{
//
// Leaves all the work to the copy constructor.
//
if(this != &rhs)
{
// deconstruct myself
this->UtilityClass::~UtilityClass();
// reconstruct myself by copying from the right hand side.
new(this) UtilityClass(rhs);
}
return *this;
}
...
};
Cela semble être une belle façon d'éviter la duplication de code, tout en assurant "programatic intégrité", mais les besoins en balance avec le risque de perdre de l'effort de libérer puis-allocation imbriquée de la mémoire qui pourrait, au lieu de cela, être ré-utilisés (comme l'auteur souligne).
Mais je ne suis pas familier avec la syntaxe qui se trouve à la base:
this->UtilityClass::~UtilityClass()
Je suppose que c'est une façon d'appeler le destructeur de l'objet (pour détruire le contenu de la structure de l'objet), tout en gardant la structure elle-même. Pour C++ pour débutants, la syntaxe ressemble à un étrange mélange d'une méthode de l'objet et une méthode de classe.
Quelqu'un pourrait-il expliquer cette syntaxe pour moi, ou me diriger vers une ressource qui l'explique?
Comment est-ce que l'appel diffèrent de la suivante?
this->~UtilityClass()
Est-ce un appel légitime? Ne ce en outre de détruire la structure de l'objet (gratuit à partir de segment de mémoire; pop hors de la pile)?