Theorie auf C ++ Konvention bezüglich Bereinigung des Haufens, ein vorgeschlagenes zu bauen, ist es gute Praxis?
-
01-10-2019 - |
Frage
ich eine andere Theorie Frage haben, wie der Titel vorgeschlagen, es ist eine Ansammlung von Code zu bewerten. Im Grunde bin ich angesichts überall diese Vorlage verwendet wird.
Ich bin mit VC ++ VS2008 (alles inklusive)
Stapel.h
class Stapel
{
public:
//local vars
int x;
private:
public:
Stapel();
Stapel(int value);
~Stapel(){}
//getters setters
void set_x(int value)
{
x = value;
}
int get_x(int value)
{
x = value;
}
void CleanUp();
private:
};
Stapel.cpp
#include "Stapel.h"
Stapel::Stapel()
{
}
Stapel::Stapel(int value)
{
set_x(value);
}
void Stapel::CleanUp()
{
//CleanUpCalls
}
Der Schwerpunkt hier ist die Bereinigungsverfahren, im Grunde möchte ich überall in allen meinen Dateien, die Methode setzen und einfach lassen Sie es tun, um meine Anrufe löschen, wenn nötig, um sicherzustellen, es ist alles an einem Ort und ich kann von fliegenden Lösch des verhindern die sich um, als Anfänger, auch ich weiß, ist wahrscheinlich nicht etwas, das Sie zu verwirren wollen, um mit noch einen schlampigen Haufen hat.
Was ist mit diesem Build?
Gute schlecht? warum?
Und was ist Destruktoren für solche Aufgaben mit?
Lösung
-Boost bietet verschiedene Dienstprogramme für RAII -Stil heap-Managment:
- Smart-Pointer (es gibt mehrere Implementierungen hier für verschiedene Szenarien)
- Pointer Container
Die Nachteile des Vorschlags:
- Sie in Ihrer Implementierung, müssen Sie noch einen Lösch in der
CleanUp
-Methode für jede Heap-Zuordnung zu platzieren erinnern Sie tun. Diese Zuweisungen Tracking kann sehr schwierig sein, wenn Ihr Programm jede Art von nicht-linearen Steuerfluss hat (einige Zuweisungen nur unter bestimmten Umständen passieren könnte). Durch die Bindung der Aufhebung der Zuordnung von Ressourcen (in diesem Fall Speicher) auf die Lebensdauer von Objekten auf dem Stapel, müssen Sie sich keine Sorgen zu machen so viel . Sie müssen noch Dinge wie zirkuläre Referenzen betrachten. - RAH hilft Ihnen schreiben ausnahmefest Code.
- Nach meiner Erfahrung RAII führt zu mehr strukturierten Code. Objekte, die nur innerhalb einer bestimmten Schleife oder Niederlassung benötigt werden nicht woanders initialisiert werden, sondern direkt in den Block, wo sie gebraucht werden. Dies macht Code leichter zu lesen und zu halten.
Edit: Eine gute Möglichkeit, die Umsetzung zu beginnen, dass bekommen Boost- . Dann wird Ihr Code für rohe Zeiger suchen, und versuchen, jeden Zeiger von
ersetzen- Eine Referenz
- Ein Smart-Zeiger
- Ein Zeiger Container, wenn es ein Behälter ist, die Zeiger besitzt
Wenn dies geschehen ist, sollten Sie Ihren Code keine delete
s mehr enthalten. Wenn Sie make_shared , können Sie sogar alle beseitigen new
s. Wenn Sie auf Probleme stoßen, dass Sie nicht selbst lösen können, überprüfen stackoverflow.com ... oh warten, Sie wissen, dass man schon;)
Andere Tipps
Verwenden Sie intelligente Zeiger und RAII statt. Das wird nicht alle delete
s an einem Ort zentriert, sondern entfernen Sie sie aus dem Code. Wenn Sie irgendeine Bereinigung ausführen müssen sich selbst, das ist, was Destruktoren sind, nutzen sie, wie das ist, die Konvention in C ++.