affectation, et copie

M

mourad

bonjour à tous,
j'ai deux questions :
1-j'ai trouvé dans certains logiciels le code suivant :

const Maclasse& Maclasse::eek:perator=(const Maclasse&right)
{
if (&right!=this)
{
this->Maclasse::~Maclasse();
::new(this) Maclasse(right); //je ne comprends pas cette ligne.

}
return *this;
}
Moi j'aurais fais une méthode commune qui sera appelée par le
constructeur de copie et l'opérateur d'affectation.

2-Question :
pour interdir la copie je déclare mon constructeur de copie en private
dans le ".h" comme suit :
MclasseDerivee::MclasseDerivee(const MclasseDerivee&right):
MClasseBase<>(right){};
est ce que c'est bon?

merci d'avance
 
E

Erik

Jag fattar inte ett ord av vad du skriver. Det finns faktiskt folk som inte
är grodätare (=fransmän)

/ Erik
 
I

Il Marishal

mourad said:
bonjour à tous,
j'ai deux questions :
1-j'ai trouvé dans certains logiciels le code suivant :

const Maclasse& Maclasse::eek:perator=(const Maclasse&right)
{
if (&right!=this)
{
this->Maclasse::~Maclasse();
::new(this) Maclasse(right); //je ne comprends pas cette ligne.

}
return *this;
}
Moi j'aurais fais une méthode commune qui sera appelée par le
constructeur de copie et l'opérateur d'affectation.

2-Question :
pour interdir la copie je déclare mon constructeur de copie en private
dans le ".h" comme suit :
MclasseDerivee::MclasseDerivee(const MclasseDerivee&right):
MClasseBase<>(right){};
est ce que c'est bon?

merci d'avance

Pour ta premiere question, je ne vois pas la definition du destructeur ou du
constructeur de Maclasse, mais a mon avis l'auteur de Maclasse allotait de
la memoire dans le constructeur et la libere dans le destructeur. Donc pour
l'operateur=, il fait un appel direct au destructeur pour liberer la memoire
dynamique de l'objet avant l'affectation, et la ligne de "new (this)
Maclasse(right)" tout simplement va recreer l'objet avec le nouveau
parametre "right" dans le meme endroit dans la memoire qui est "this"

D'ailleurs on peut (dependant du compilateur) passer une addresse a
l'operateur new comme parametre, par example :

Maclasse* pTaclasse = new ((void*)0x1234) Maclasse;

Va creer un un objet du type Maclasse a l'addresse 0x1234, mais il faut
faire attention pour faire ce genre de manupilation et savoir ce qu'on fait
exactement. Dans ton cas c'est pas aussi grave car le pointeur "this" est:
1) valable 2) l'affectation va remplacer l'objet avec un autre identique (du
point de vue de taille).

J'ai pas tres bien compris ta 2eme question, quand tu dis est ce que c'est
bon tu veux dire syntactiquement bon ou techniquement bon? Point de vue
technique, c'est correcte de declarer le constructeur de copie en privee si
tu veux supprimer l'operation. Mais du point de vue syntax est ce que ta
classe est une template (MclasseBase<?>) et c'est quoi le type du parametre
"right", comment veux tu creer un objet de base avec un objet derive ? Si tu
clarifies un peu ce que tu veux faire je pourrais peut etre te repondre.

Je suis pas un expert mais c'est ma reponse vue l'information que t'as
donne.
 
U

Unforgiven

Erik said:
Jag fattar inte ett ord av vad du skriver. Det finns faktiskt folk som inte
är grodätare (=fransmän)

Ja maar, hoe zit het dan met de Nederlanders? Ik heb werkelijk geen idee wat
hier allemaal gezegd wordt, ik spreek Frans noch wat het dan ook is wat Erik
spreekt (iets Scandinavisch vermoed ik)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top