¿Se llama un destructor cuando un objeto sale de alcance?

Por ejemplo:

int main() {
    Foo *leedle = new Foo();

    return 0;
}

class Foo {
private:
    somePointer* bar;

public:
    Foo();
    ~Foo();
};

Foo::~Foo() {
    delete bar;
}

¿El destructor será llamado implícitamente por el compilador o habrá una pérdida de memoria?

Soy nuevo en la memoria dinámica, así que si este no es un caso de prueba utilizable, lo siento.

Respuestas a la pregunta(4)

Su respuesta a la pregunta