Bonsoir

j'ai une question un peu idiote.
J'ai une classe qui possède en public différentes fonctions pour construire un objet. Voici un extrait du code
Code : 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
 
//public
TypeBien* TypeManager::GetTypeById(const size_t id){
    TypeBien* returnMe = NULL;
    std::map<size_t,std::unique_ptr<TypeBien> >::iterator it = m_ListeTypes.find(id);
    if(it != m_ListeTypes.end()){
        returnMe = it->second.get();
    }
    return returnMe;
}
 
TypeBien& TypeManager::CreateType(){
    TypeBien nouveauType(m_LastId,"");
    CreateType(nouveauType);
    m_LastId++;
    return nouveauType;
}
 
TypeBien& TypeManager::CreateType(const QString& libelle){
    TypeBien nouveauType(m_LastId,libelle);
    CreateType(nouveauType);
    return nouveauType;
}
 
//private
void TypeManager::CreateType(TypeBien& nouveauBien){
    QString id = nouveauBien.GetId();
    QString libelle = nouveauBien.GetLibelle();
    QString requete = "INSERT INTO typebien (id,libelle) VALUES (" + id + "," + libelle + ")";
    m_Request.exec(requete);
    m_Request.finish();
 
    m_ListeTypes.insert(std::pair<size_t,std::unique_ptr<TypeBien> >(nouveauBien.GetIdNumber(),std::unique_ptr<TypeBien>(&nouveauBien)));
}
Mon but étant de ne pas recopier l'objet. C'est pour cela que je mets un pointeur dans ma map, et plus précisement un unique_ptr pour ne pas avoir à gérer leur destruction.
Ma question est : ma fonction publique construit un objet dans la pile donc il devrait être supprimé à la fin du scope ? Je ne crois pas avoir fais une copie et pourtant quand je fais GetTypeById l'objet est toujours valide o_o.
Vous pouvez m'expliquer ce qu'il se passe en mémoire s'il vous plait ?

merci