PIMPL idiom und std::auto_ptr - Destruktor wird nicht aufgerufen



  • camper schrieb:

    Unfug.

    Was bist du für ein Vogel?


  • Mod

    Shlo schrieb:

    camper schrieb:

    Unfug.

    Was bist du für ein Vogel?

    Frechheit ersetzt keine fehlenden Argumente.



  • Shlo schrieb:

    Wozu würde man sonst einen Destruktor mit leerem Body definieren?

    Es gibt einen Unterschied zwischen dem, was der C++ Standard sagt, und dem, was eine Implementierung daraus macht. Du berufst Dich scheinbar auf Implementierungsdetails. Eine Implementierung könnte aber auch ganz anders aussehen, wie zB:

    template<class T>
    class auto_ptr {
      ...
      static_assert(__is_complete_type(T),"violated requirements, T is incomplete");
      ...
    };
    

    (entsprechende Compiler-Magie bzgl static_assert und __is_complete_type vorausgesetzt) Dies müsste nach meinem Verständnis standardkonform sein. Dein Ansatz würde dann aber leider nicht mehr kompilieren. In dem Fall könntest Du Dich auch nicht beim Compilerhersteller beschweren, da Dein Programm die "library requirements" verletzt und damit undefiniertes Verhalten hervorruft.

    Mit unique_ptr sollte der Trick bzgl Destruktor garantiert aus den Gründen, die Du genannt hast, funktionieren -- auch ohne eigenen Deleter. Wegen des benutzerdefinierten Dtors würden dann aber die Move-Operationen nicht mehr automatisch generiert. Die müsste man dann per =default;-Syntax explizit erzwingen.

    Edit: Ah, ich erinnere mich. Du bist der Typ, der mir vor einer Woche unterstellen wollte, Iteratoren nicht verstanden zu haben. Dein Gehabe fand ich da auch schon nervig.

    kk



  • Shlo schrieb:

    unfug

    Die instantiierung eines Templates ist etwas völlig anderes als die Instantiierung eines Objektes.



  • camper schrieb:

    Frechheit ersetzt keine fehlenden Argumente.

    ROFL. Das sagt der Richtige... 🙄



  • otze schrieb:

    Die instantiierung eines Templates ist etwas völlig anderes als die Instantiierung eines Objektes.

    Bist du auf den Kopf gefallen? Das Gegenteil habe ich auch nicht behauptet.


  • Mod

    Shlo schrieb:

    camper schrieb:

    Frechheit ersetzt keine fehlenden Argumente.

    ROFL. Das sagt der Richtige... 🙄

    Das war eine (weitgehend) objektive Beurteilung der Mitteilung ganz im Gegensatz zu einem Angriff auf die Person, was du vorzuziehen scheinst.

    std::auto_ptr<TestImp> imp wird bei der Definition der Klasse Test instantiiert. Zu deisem Zeitpunkt ist TestImp unvollständig definiert. Also resultiert undefiniertes Verhalten.
    Dass die Instantiierung von std::auto_ptr<TestImp> nicht die dessen Destruktors auslöst, führt dank gewisser Implementierungsumstände dazu, dass das ganze Konstrukt ggf. mit einem bestimmten Compiler funktionieren kann. Das hat krümelkacker bereits erklärt. Es bleibt also tatsächlich nichts übrig.



  • Shlo schrieb:

    Bist du auf den Kopf gefallen? Das Gegenteil habe ich auch nicht behauptet.

    Wenigstens habe ich einen Kopf, auf den ich fallen kann. Siehe Campers Erklärung.



  • Warum so aggressiv, Shlo?



  • otze schrieb:

    Wenigstens habe ich einen Kopf [..]

    Daran habe ich erhebliche Zweifel angesichts der Tatsache, dass du nicht einmal in der Lage bist, eine einfache Dokumentation zu finden/lesen und/oder zu verstehen. Siehe dein erster Beitrag dieser Diskussion.

    Ruhe schrieb:

    Warum so aggressiv, Shlo?

    Das war eine logische Konsequenz auf die Provokationen von camper und otze. Für mich ist das Thema an dieser Stelle erledigt.



  • Shlo schrieb:

    Siehe dein erster Beitrag dieser Diskussion.

    Fragezeichen am Ende des Satzs. Moment ich schlage es dir nach:

    http://de.wikipedia.org/wiki/Fragezeichen

    Habe dir gerne geholfen.



  • otze schrieb:

    Shlo schrieb:

    Siehe dein erster Beitrag dieser Diskussion.

    Fragezeichen am Ende des Satzs. Moment ich schlage es dir nach:

    http://de.wikipedia.org/wiki/Fragezeichen

    Habe dir gerne geholfen.

    Keine Ahnung was du willst. Die folgenden Links werden dir aber sicherlich weiterhelfen.

    http://de.wikipedia.org/wiki/Rechtschreibung
    http://de.wikipedia.org/wiki/Satzzeichen



  • Um es auf's Kindergarteniveau zu bringen: Shlo, du hast angefangen.
    Und zwar hiermit:

    So, wie ich das sehe, steckt hinter dieser Aussage nichts, außer Wichtigtuerei.

    Lies dir nochmal alles in Ruhe bis dahin durch. Bis dahin gab es noch keine wirkliche Provokation oder dergleichen.



  • Shlo schrieb:

    Ob streng genommen oder nicht, lagst du daneben. Schade, dass du nicht selbst darauf gekommen bist.

    So ein Quatsch. Vielleicht überzeugt Dich ja schließlich ein Mitglied des C++-Standardisierungskomitees (Daniel K.). Man findet diesen Thread ganz schnell, wenn man nach auto_ptr und pimpl in der clc++m-Newsgroup sucht. Bin leider nicht sofort auf die Idee gekommen, danach zu suchen. Das hätte mir nämlich einiges an Arbeit gespart. 🙂


Anmelden zum Antworten