begin process at 2012 02 10 13:25:08
  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

constructeur de conversion explicite [ par eishtein ] bonjour les gars; comme je suis un débutant en c++, j'aimerais bien savoir comment on pourrait convertir un nombre de type quelconque en un nombre de ecrire un programme en c qui gere le double appel [ par kenjijunior ] bonjour a tous pourriez vous m'aider a ecrire un programme en c qui gère le double appel? code en C [ par gachawi ] bonjour!! mon problème c'est que je veut faire dans mon PFE un système alarme avec transmission d'appel vidéo mais j'ai trouvé une difficulté dans le was not declared in this scope [ par aymen87 ] Bonjour à ts J'utilise l'editeur slick edit,le langage est c++. j'ai un fichier monitoringmain.cpp ou j'ai inclus #include "MonitoringMain.hpp" le Comment faire un double enregistrement [ par HardinLTyler ] Bonjour à tous! J'aimerais avoir vos idées sur comment faire un double enregistrement automatique applicable sur toute la suite Office, par simple en Besoin d'aide c++ [ par sevio14 ] Quelqu'un peut-il m'aider à faire le programme de l'algorithme d'uzawa? Voici ce que j'ai commencé à définir: #include #include #include #includ Capture d une etoile par une planete [ par Xzin ] Bonjour, j'aurai besoin d'un peu d'aide pour mon projet d'informatique. Mon thème est la capture d'une planete par une etoile qui s'approche. Je dois probleme de division [ par kikak ] Il faut m'aider svp j'ai un problème incompréhensible (enfin pour moi) je doit tout simplement diviser deux chiffre dans le but de savoir si le résult Programme en c++ [ par noussa44 ] Bonjour à tous et merci d'avance pour vos réponses, J'ai fait un petit code en c++ pou calculer la distance entre des points avec la formule :d² = (x' Tableau d'objets [ par Adel85 ] Bonjour, J'ai un tableau d'objets et je veux accéder à une méthode de l'ième objet. Par exemple class A { double x; public : A() { x=0.;


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,952 sec (4)

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