Valgrind no reporta pérdida de memoria en "eliminar matriz"

Después de implementar el código C ++ a continuación, ejecutévalgrind --leak-check=full con el fin de comprobar si hubo alguna pérdida de memoria. El resultado fue0 bytes estaban en uso en la salida yno hay fugas posibles.

Sin embargo, más tarde descubrí que me he olvidado de usardelete[] x en lugar de solodelete x Dentro del destructor.

Busqué algunas explicaciones (por ejemplo:Eliminar vs eliminar operadores [] en C ++), y todo lo que leí decía que usandodelete sin[] puede causar pérdida de memoria, ya que solo llama al destructor para el primer objeto en la matriz.

Cambié el código para eliminar [] y la salida de valgrind fue la misma (como se esperaba). Pero ahora estoy confundido:"¿Hay un problema con valgrind, o hacedelete Realmente funciona bien para matrices incluso sin el operador[]? "

#include <iostream>
#include <string.h>
using namespace std;
class Foo {
  private: char *x;
  public:
    Foo(const char* px) {
       this->x = new char[strlen(px)+1];
       strcpy(this->x, px);
    }
    ~Foo() {
       delete x;
    }
    void printInfo() {  cout << "x: " << x << endl;  }
};
int main() {
   Foo *objfoo = new Foo("ABC123");
   objfoo->printInfo();
   delete objfoo;
   return 0;
}