auto_ptr Problem



  • hallo leute,

    ich habe ein, sicher kleines, problem mit auto_ptr und zwar: ich habe ein kleines beispiel mit auto_ptr geschrieben das sich aus einer abstrakte klasse Person und zwei abgeleiteten klassen Man und Frau besteht. diese klassen haben eine methode clone die ein neues objekt (instanz) zurückliefern. diese methode sieht (für die Man klasse) so aus:

    Man *clone()
    {
      return( new Man(*this) );
    }
    

    ok, dann habe ich eine Factory klasse geschrieben die dazu bestimmt ist eine neue instanz von einer registrierte klasse zurückliefern. dies habe ich so gemacht: ich registriere meine klassen (in diesem fall Man und Frau), die die Factory erzeugen und zurückliefern kann. wenn ich eine klase erzeugen will die bei der Factory nicht registriert ist, kriege ich selbstverständlich, eine fehlermeldung. das ist aber nicht wichtig. die metode aus factory die diese neue instanz zurückliefert sieht so aus:

    auto_ptr<Person> getInstance(id)
    {
      if(validTypeOfObjekt(int id)) // id ist id von einem registriertem objekt 
                                    // (map)
      {
        iterator = ...
        return ( iterator->second->clone() )
      }
    }
    

    dies alles funktioniert ganz gut, aber...

    int main()
    {
      Factory *temp_factory = new Factory();
      // hier registriere ich meine klassen bei Factory
      // zB. temp_factory->registerTypeOfObjekt(1, new Man()); usw.
      <auto_ptr> temp(temp_factory->getInstance(1));
      temp->sayHello(); // output soll sein: Hallo, ich bin ein Man
      delete temp_factory;
    }
    

    ich kriege kein output. mich interessiert warum nicht. habe auch die getInstance methode verändert so dass diese überprüft ob ein objekt von der clone methode gekommen ist -> ist ok. warum kriege ich nichts in main? danke im voraus für jede hilfe. ach ja, den code kann ich auch schicken.

    mfg,
    erno



  • IMO Falsches Forum.
    Dies ist STD-C++ und kein Win32 Konsole.

    Verwende für C++Code bitte die entsprechenden BB-Tags.
    (Der erste button unter den Smilies 😉 )

    Ausserdem könnte es sein das dein objekt nich registriert wurde?
    probiers mal so:

    auto_ptr<Person> getInstance(id)
    {
      if(validTypeOfObjekt(int id)) // id ist id von einem registriertem objekt
                                    // (map)
      {
        iterator = ...
        return ( iterator->second->clone() )
      }
      else
      {
        std::cout << "not registered!" << endl;
        return  NULL;
      }
    }
    

    Mfg Shade37337



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten