Objekte lieber auf den Stack oder Heap erzeugen?
-
Danke für die Antwort, bei mir kann ich nur per new das Objekt anlegen,ansonsten erahlte ich die Fehlermeldung
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Window::~Window(void)" (??1Window@@QAE@XZ)" in Funktion "_WinMain@16".
-
Was ist
Windowfür eine Klasse? Gehört sie zu einem dieser netten Frameworks, welche den Programmierer zu dynamischer Speicheranforderung zwingen?
-
ne da habe ich nur versucht die Fenstererzeugung in eine Klasse zu packen. Wenn ich das Objekt mit new erzeuge funktioniert auch alles wunderbar. nur wenn ich es mit z.b Window mein_fester(....) erzeuge kommt der Linkerfehler.
-
Das sieht mir so aus, als ob du mit deiner new-Variante nicht delete benutzt, weshalb der Destruktor von Window nicht benötigt wird, bei auto hingegen wird der Destruktor automatisch aufgerufen, und das kann er nicht, weil du ihn nur deklariert, aber nicht definiert hast.
-
Ich verneige mich vor dir großer Meister, genau das war es. Den Destruktor definiert und alles lief wie geschmiert

-
Und nie
deletevergessen! Das meinte ich mit "fehleranfällig"...
(War hier wohl nur ein kurzer Test, aber Speicherfreigabe geht genügend oft zu schnell in Vergessenheit).
-
Ja das habe ich auch so gelesen. Ist das richtig das man dann new und delete am besten in einen konstruktor und destruktor einer KLasse packt damit man dann nach RAII vorgeht, also die Speicherfreigabe dann automatisch geschieht wenn das objekt z.B. durch scope verlassen zerstört wird?
-
cppfrager schrieb:
Ja das habe ich auch so gelesen. Ist das richtig das man dann new und delete am besten in einen konstruktor und destruktor einer KLasse packt damit man dann nach RAII vorgeht, also die Speicherfreigabe dann automatisch geschieht wenn das objekt z.B. durch scope verlassen zerstört wird?
Ja, dies ist üblicherweise eine sehr gute Idee.
-
cppfrager schrieb:
Ja das habe ich auch so gelesen. Ist das richtig das man dann new und delete am besten in einen konstruktor und destruktor einer KLasse packt damit man dann nach RAII vorgeht, also die Speicherfreigabe dann automatisch geschieht wenn das objekt z.B. durch scope verlassen zerstört wird?
Sofern kein besonderer Grund vorliegt, bastelst du die Klasse aber besser nicht selbst, sondern verwendest eine der vorhandenen Smartpointerklassen.
-
So, nachdem mir hier so nett geholfen wurde habe ich mich angemeldet. Danke nochmals, ich werde bestimmt noch viele Fragen haben da ich erst jetzt wieder mit C++ anfangen und früher aber auch nicht gerade weit gelernt hatte.