begin process at 2010 02 10 09:07:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Appel du destructeur inopinément


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Appel du destructeur inopinément

jeudi 26 octobre 2006 à 12:29:29 | Appel du destructeur inopinément

petitavion414

Bonjour à tous... Voilà j'ai un petit problème. J'ai crée une classe complex dans laquelle j'ai defini quelques méthodes. Jusqu'ici rien de bien passionnant....
Cependant des que j'utilise une méthode qui prend un objet de cette même classe comme argument, l'execution appel le destructeur juste avant l'execution de la méthode...
Je vous montre un petit exemple:

++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++
complex.H:
#include<iostream>
using namespace std;

class complex
{
    double real_part;
    double imaginary_part;
    // Friend function :
    friend void module(complex a,double &mod);

public :
    // Constructor
    complex();
    complex(double a, bool b);
    complex(double a, double b);
    complex (const complex &source_complex); // copy constructor

    // Operator overloading
    complex operator = (complex);
    bool operator == (complex);
    complex operator + (complex);

    virtual void display();
    virtual complex multiplication(const complex a);
    virtual complex multiplication(double b);

   
    // Destructor
    virtual ~complex();
};

void module(const complex a,double &mod);
+++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++

des que j'appel par exemple la fonction module, le destructeur est appelé (je le sais car j'ai demandé qu'il affiche une phrase des qu'il est appelé...)
j'obtiens

+++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++
MAIN

#include <iostream>
#include "Class_complex.h"

using namespace std;

int main()
{
    int exit; bool essai=false; double mod;
    complex a= complex (2.0,3.0);
    complex b=a.multiplication(2.);
    complex c= complex(1.0,2.0);
    complex d= a.multiplication (c);
    b.display();
    cout << endl;
    d.display();
    cout << endl;
    complex e=complex(a);
    e.display();
    module(e,mod);
    cout << mod << endl;

    return 1;
   
}

J'obtiens

The complex number was destroyed
4 + i*6

-4 + i*7

2 + i*3
The complex number was destroyed          <- juste avant module le destructeur
3.60555                                                      <- appel de la function module
The complex number was destroyed
The complex number was destroyed
The complex number was destroyed
The complex number was destroyed
The complex number was destroyed

complex has exited with status 1.


Je suis un peu perdu, merci d'avance

jeudi 26 octobre 2006 à 12:52:59 | Re : Appel du destructeur inopinément

mad_love_disease

Réponse acceptée !
Salut,

Ta méthode module fait appel en parametre a un complex nommé a:
friend void module(complex a,double &mod);

Lorque tu appel module la variable a est allouer et construite "par copie" du parametre que tu lui donne

Donc lorsque l'instruction est terminé, la variable complex a est local a la fonction module, elle est détruite avant que tu n'affiche le resultat "mod".

De manière générale, il ffaut définir cette forme au minimum si tu ne veux pas de surprise d'allocation/desallocation hasardeuse.

Complex(); // constructeur par défault
~Complex() ; // destructeur
Complex(const Complex &) ; //par copie
Complex& operator=(const Complex &) ; // operateur =

De plus, passe ta classe en parametre "reference constante" quelquesoit tes méthodes, ces moins lourd à gérer et évite les aloocations/desallocations de parametres (quand ce n'est pas natif)

D'autre part, je te conseille de créer une méthode pour obtenir le module de ton complex (c'est un conseil)

double module()

Complex c;
c.module() te retourne le module

Vala

Mad_Love_Disease
jeudi 26 octobre 2006 à 13:02:08 | Re : Appel du destructeur inopinément

petitavion414

Merci bcp
jeudi 26 octobre 2006 à 13:24:44 | Re : Appel du destructeur inopinément

mad_love_disease

De rien,

On est la pour ça..... Bon courage pour la suite.

Mad_Love_Disease


Cette discussion est classée dans : appel, number, was, double, complex


Répondre à ce message

Sujets en rapport avec ce message

programmation odbc [ par adel ] comment resoudre les problèmes d'appel à l'API ODBC ,telque l'appel à SQLNativeSql? Appel d'interruption avec Dev c++ [ par bouba ] Comment appeler une interruption en assembleur avec dev c++ ? bouba appel de functions C++ en C [ par JFK ] Je voudrais utiliser une lib écrite en C++ dans un programme C.Est ce qu'il est possible d'appeler une fonction C++ dans un prog écrit en C, l'inverse long double et VC++ [ par omi ] J'ai un leger probleme avec visual C++ 7.0 .N'y a t'il pas un moyen de lui faire accepter les long double car il les prend pour des double normaux cad Affichage décimal [ par couriousous ] Hello!Comment afficher une variable long double avec toutes ses décimales SANS la convertire au format double (perte de précision)???Merci! Appel reseau pour trouver une machine (broadcast?) [ par jfloviou ] Salut,je cherche un moyen de lancer un appel sur un reseau pour qu'une machine me renvoie son adresse. En gros, une machine du reseau est un serveur, CONVERSION DOUBLE CHAR [ par DeAtHCrAsH ] Salut,J'ai un ptit pb... Je suis debutant et j'ai un ptit prob...Je veux utiliser la fonction atof mais quand je compile ca me dit : undeclared identi conversion double en string [ par bouba ] Bonjour, je réalise une fonction qui doit calculer le nombre de caractères d'un doubleexemple:-7.56 -> 5 caractèreExiste t'il une fonction qui fasse c PB valeur maximale variables [ par chmod777 ] voila, j'ai une boucle for qui doit se terminer lorsque la variable compteur atteint 208.827.064.576 le probleme c'est qu'avec une variable de type in double pointeur, récursivité dans les arbres binaires ordonnés [ par alfred289 ]


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,234 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales