Bonjour,

je suis face à un question que je n'arrive à répondre.
Voici le code :
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <new>
 
class Test
{
    private:
    int * m_nbr;
 
    public:
    Test( void ): m_nbr( 0 )
    {
        m_nbr = new( std::nothrow ) int;
        if( 0 != m_nbr )
            *m_nbr = 0;
    }
    Test( int aNbr ): m_nbr( 0 )
    {
        m_nbr = new( std::nothrow ) int;
        if( 0 != m_nbr )
            *m_nbr = aNbr;
    }
    Test( Test const & aTest ): m_nbr( 0 )
    {
        m_nbr = new( std::nothrow ) int;
        if( 0 != m_nbr )
            *m_nbr = *aTest.m_nbr;
    }
    ~Test( void )
    {
        std::cout << "delete" << std::endl; // rajouté pour indiquer que les instances sont bien supprimées.
        delete( m_nbr );
    }
    int getNbr( void ) const
    {
        if( 0 == m_nbr )
            return( 0 );
        else
            return( *m_nbr );
    }
    int * getPtNbr( void ) const
    {
        return( m_nbr );
    }
    void print( void )
    {
        std::cout << "(" << m_nbr << "," << *m_nbr << ")";
    }
};
 
int main( void )
{
    int * thePtNbr( 0 );
    {
        Test theTest1;
        std::cout << "Test1: ";
        theTest1.print();
        std::cout << std::endl;
 
        thePtNbr = theTest1.getPtNbr();
 
        Test theTest2( 2 );
        std::cout << "Test2: ";
        theTest2.print();
        std::cout << std::endl;
 
        theTest1 = theTest2;
        std::cout << "Test1: ";
        theTest1.print();
        std::cout << std::endl;
    }
    std::cout << "(" << thePtNbr << "," << *thePtNbr << ")" << std::endl;
 
    return( 0 );
}
Je ne comprends pas pourquoi l'affection "theTest1 = theTest2;" fonctionne alors que l'opérateur "=" n'est pas définie pour cette classe Test. Cela provoque de surcroit une fuite mémoire (comme le montre la ligne avant le return du main). Par ailleurs, cela ne pose aucun problème lors de la destruction de "theTest2" de détruire "m_nbr" qui a normalement été détruit lors de la destruction de "theTest1".

J'ai par ailleurs essayé en ne mettant uniquement le constructeur par défaut de la classe Test : "Test( void )", mais j'ai le même résultat.
Pour informations, je compile avec MinGW, g++ version 4.7.2.

Merci beaucoup pour vos indications.