Valgrind nie zgłasza przecieku pamięci w „usuń tablicę”

Po zaimplementowaniu poniższego kodu C ++ uruchomiłemvalgrind --leak-check=full w celu sprawdzenia, czy nie było wycieku pamięci. Wynik był0 bajtów było używanych przy wyjściu iżadne wycieki nie są możliwe.

Jednak później odkryłem, że zapomniałem użyćdelete[] x zamiast po prostudelete x wewnątrz destruktora.

Szukałem pewnych wyjaśnień (na przykład:operatory delete vs delete [] w C ++), a wszystko, co przeczytałem, mówi to za pomocądelete bez[] może spowodować wyciek pamięci, ponieważ wywołuje tylko destruktor dla pierwszego obiektu w tablicy.

Zmieniłem kod do usunięcia [], a wyjście valgrind było takie samo (zgodnie z oczekiwaniami). Ale teraz jestem zdezorientowany:„Czy istnieje problem z valgrind lub robidelete naprawdę działa dobrze dla tablic nawet bez operatora[]?

#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;
}

questionAnswers(2)

yourAnswerToTheQuestion