C++ new und delete wie nutzen?

3 Antworten

Das "new" reserviert Speicher und der wird nicht automatisch einfach so wieder freigegeben. Das musst Du aktiv selber machen, ansonsten ist das ein Anfängerfehler der Art, dass das Programm bei wiederholter Anwendung dieser Funktion immer mehr Speicher bekommen will ohne ihn nach der Funktion überhaupt noch nutzen zu können. Kommt das oft genug vor, wird es echte Probleme geben, seien es extreme Verlangsamungen oder Abstürze.

Vielleicht könntest Du C# nutzen, denn das nimmt Dir solche Überlegungen ab und räumt auf, wenn ein Speicher nicht mehr referenziert wird. Dafür hat es dann aber auch wieder eigene Fallstricke. -)

Dafür nimmt man niemals ein nacktes new und delete, sondern ausschließlich Smartpointer, in deinem Falle vorzugsweise mit make_unique() wie hier:

#include <memory>

// ...

auto ptr { ::std::make_unique<int>(123) };

// ...

cout << *ptr << endl; // 123
*ptr = 456;
cout << *ptr << endl; // 456

Das hat exakt Null Laufzeitoverhead und du kannst einen Smartpointer mit * oder -> ganz normal dereferenzieren.

Um ein delete musst du dich danach nicht mehr kümmern, denn das geschiet im Destruktor am Ende des Gültigkeitsbereiches automatisch.

Der obige Code macht das gleiche wie ...

int * ptr = new int(123);
// ...
delete ptr;

... nur eben in "sicher", sodass auch bei geworfenen Ausnahmen ordentlich aufgeräumt wird.

Woher ich das weiß:Berufserfahrung
class Object
{
};
int main()
{
	auto o = new Object;
	delete o;
	return 0;
}

Du musst übrigens nicht generell new benutzen, es macht oft Sinn es einfach als Lokale Variable zu halten:

int main()
{
	Object o;
	return 0;
}
Woher ich das weiß:Hobby