C++ - Vektoren und Memory Leaks

Habe ich irgendwo gelesen vor einiger Zeit, dass Vektoren Speicherverluste verursachen, je nachdem, wie Sie es gewohnt sind, aber ich würde gerne Fragen, nur um sicher zu sein:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int main()
{
    vector<somePtr*> listPtrs;

    return 0;
    //Detects memory leaks
}

- Und dies nicht erkennen, was:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

int main()
{
    {
        vector<somePtr*> listPtrs;
    }

    return 0;
    //No memory leaks detected
}

Sind die Objekte nicht mehr gelöscht werden die Vektoren vor dem löschen der Zeiger.
Ich glaube ich erinnere mich gelesen zu haben, dass Vektoren und Listen und anderen Krankheiten, die Behälter werden automatisch gelöscht, nachdem der block, die Sie in sind, also im Beispiel 1 bekomme ich den memory leak, da der memory-leak-Funktion wird aufgerufen, bevor der block endet, so daß der Vektor ist immer noch lebendig und die, die es verursacht.

Ich bin mir nicht sicher, obwohl es, es ist eine Weile da ich denke, dass ich dies Lesen, und ich konnte nur Fragen über Gegenstände, die nicht gelöscht, nur die Zeiger entfernt werden.

Ist das wahr? Und bekomme ich memory leaks, wenn ich Globale Klassen, enthält, Vektoren und Listen?

std::vector verursacht keine Speicherlecks, nachlässige Programmierer tun.
Sollten Sie auch ein Beispiel, dass tatsächlich weist das Verhalten, das Sie erleben, einschließlich der Aufrufe der CRT-debug-API. Es ist eine gute Möglichkeit, dass Sie falsch interpretieren des Lecks basierend auf, wenn Sie gemeldet werden.
Es gibt keine Speicher-Lecks in einem der beiden Beispiele, die Sie gezeigt haben.

InformationsquelleAutor Danicco | 2013-08-05

Schreibe einen Kommentar