Ich habe zwei Zeiger:Führt das Umleiten eines Zeigers zu einem Speicherleck?
int *a = new int;
int *b = new int;
Jetzt stelle ich b
gleich a
:
b=a;
Meine Sorge um die Erinnerung ist, dass b
zunächst auf hinwies. Wenn ich b
umleiten, um auf den Speicher zu zeigen, der auf a
zeigt, zeigen beide auf denselben Speicherort. Was ist mit dem vorherigen Speicherort von b, ist es freigegeben oder es ist im Speicherleck?
Speicherverlust zu verhindern, sollte ich es tun auf diese Weise:
delete b;
b=a;
Natürlich verliert dieser Code Speicher wie ein Sieb. – user0042
Es gibt keine Speicherbereinigung in C++, also ohne das 'delete' ist es ein Speicherleck. (Auch im modernen C++ sollten Sie aus diesem Grund lieber Smartpointer als rohe Pointer verwenden.) – UnholySheep
Wenn Sie denken, dass Sie Zeiger benötigen, wird der erste von Ihnen nur selten für einzelne Werte einfacher Typen wie 'int' benötigt. Betrachten Sie dann die Standardcontainer ['std :: array'] (http://en.cppreference.com/w/cpp/container/array) und [' std :: vector'] (http: //en.cppreference. com/w/cpp/Behälter/Vektor). Betrachten Sie dann Smartpointer wie ['std :: unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr) und [' std :: shared_ptr'] (http: //en.cppreference. com/w/cpp/speicher/shared_ptr). Dann und nur dann betrachten Sie rohe einfache Zeiger. –