Stack vs Heap C++

Ich hatte gerade eine kurze Frage, wie stack-Variablen versus heap-Variablen arbeiten. Wie ich es verstehe, stack-Variablen sind Variablen, die nach Funktionen, werden gelöscht, und heap-Variablen sind persistent. Aber was mich wirklich verwirrt, ist die Art der Allokation der heap-Variablen innerhalb von Funktionen:

int MyObject::addObject(const char* a){
    MyObject newObject(a);
    return 0;
}

Sagen, dass ich einen Konstruktor für MyObject ist newObject(const char * a). Dann in dieser Funktion, wenn Sie aufgerufen wird, nach der Rückkehr hat der neu errichteten newObject gelöscht zu bekommen? Wenn ja, wie können Sie reservieren in den heap innerhalb einer Funktion dann? Wenn nicht, wie können Sie bereinigen Ihre Speicher später?

Außerdem, was genau ist die Rolle von einem Destruktor und Wann wird es aufgerufen?

  • Haben Sie sich überlegt mit std::string statt char* ? Werfen C Speicher-management in den mix neigt zu befuddle, Ihre MyObject-Klasse muss nun entscheiden, wie besitzt die Speicher für den Zeiger und wahrscheinlich braucht, um kopieren Sie die Zeichenfolge und einen Destruktor, um es wieder freigeben. Dies nicht zu tun, ist eine sehr wahrscheinliche Pfad zu Versagen.
  • Sie sollten nicht einmal denken, "stack" und "heap". Wenn Sie ein Auto fahren, werden Sie in der Regel nicht über die Zylinder-Zyklus prasselt, tun Sie? Die Dinge zu verstehen, die in C++ sind storage-Klassen und Objekt-Lebensdauer: automatisch (scoped), dynamisch (manuell), statisch (global).
  • Wenn Sie mit C oder C++, würde Sie bestreiten, dass es gut zu wissen, den Unterschied zwischen den beiden? Ich denke, das ist, was OP ist immer hier.
  • Ich würde sagen, es ist verwirrend und irreführend, auch nur zu erwägen die beiden. Diese sind eine Implementierung detail, dass Sie nachdenken können, an einem regnerischen Sonntag über Kaffee, aber für die Zwecke der das Verständnis von C++ sind Sie unnötige Unordnung und Lärm... besonders, wenn du neu bist und noch so viel mehr wichtige Dinge zu lernen 🙂
  • Was für ein Zufall, es ist Sonntag und es regnet. Kaffee brauen.
  • SB, Stimme überhaupt nicht zu. Wissen Sie, dass die Standard-stack-Größe auf 32-bit-Windows-1 MB groß ist? Wenn der Anfänger weiß das nicht, (s)er kann denken, cool, werde ich nutzen stack die ganze Zeit — aber Sie sollten wirklich nicht tun.
  • Ich würde sagen, dass ein Algorithmus verwendet, der viel stack-Größe, die vielleicht andere Probleme haben. Sicher gibt es Situationen, wo Sie brauchen nur einen lokalen Speicherblock (in diesem Fall sollten Sie die drop-in ersetzen std::unique_ptr<Foo[]>), aber das dürfte eine seltene Ausnahme.
  • Ich auch nicht Zustimmen. Diese sind nicht in der Umsetzung details, dies sind die Konzepte, die Sie haben zu verstehen, für die gleichen Gründe, dass Klassen und Objekte sind Konzepte, die in einer OOP-Sprache, und Sie sollten verstehen, diejenigen, die als gut. Wenn Sie nicht wissen, wo Ihre Gegenstände sind und das Leben derer, die Sie nicht in der Lage sein, zu schreiben, effizienten c++ - code. Nicht in den aktuellen Zustand der Sprache ist mindestens. Es gibt nur so viel Sie bekommen können entfernt, indem nur an der Oberfläche kratzen.

InformationsquelleAutor KWJ2104 | 2011-12-11
Schreibe einen Kommentar