abstrakte Basisklasse in boost::scoped_ptr
-
Hallo,
Ich wollte einen Pointer auf eine abstrakte Basisklasse in einen scoped_ptr stecken um das Handling etwas zu vereinfachen. Das alles ist eine membervariable in einer anderen Klasse.
Wenn ich das aber versuche zu kompilieren gibt es eine Fehlermeldung[C++ Fehler] checked_delete.hpp(32): E2450 Undefinierte Struktur 'delphin_data::CreatorBase'
[C++ Fehler] checked_delete.hpp(32): E2109 Kein zulässiger Typ
[C++ Fehler] checked_delete.hpp(32): E2021 Array muß mindestens ein Element enthalten.Wenn ich statt dessen shared_ptr oder auto_ptr verwende geht alles. In der boost Doku steht ja, dass man nur vollständige Typen (complete type) in einem scoped_ptr unterbringen kann. Ist das hier so ein Fall?
-
Braunstein schrieb:
Wenn ich statt dessen shared_ptr oder auto_ptr verwende geht alles. In der boost Doku steht ja, dass man nur vollständige Typen (complete type) in einem scoped_ptr unterbringen kann. Ist das hier so ein Fall?
Möglich, auch auto_ptr benötigt einen vollständig definierten Typ. checked_delete ist ja gerade dafür da, dies zu überprüfen.
-
Wo ist dann das Problem?
Von dieser abstrakten Basisklasse werden natürlich weitere (konkrete) Klassen abgeleitet. Dies sind allerdings alles Templates (die Basisklasse nicht).
-
Braunstein schrieb:
Wo ist dann das Problem?
Von dieser abstrakten Basisklasse werden natürlich weitere (konkrete) Klassen abgeleitet. Dies sind allerdings alles Templates (die Basisklasse nicht).Es kommt darauf an, dass die Basisklasse vollständig definiert ist an der Stelle, an der der Zeiger definiert wird für auto_ptr, bzw. an der Stelle, an der der Destruktor instantiiert wird, im Falle von scoped_ptr.