Se você não limpar explícita ou implicitamente a memória antes de liberá-la, ela reterá os dados armazenados nela.
Quando você aloca certa quantidade de memória, ela pode ter os dados nela deixados por um processo anterior (ou outra parte do seu aplicativo). Se nenhum processo manteve essa área de memória desde a inicialização, então a área provavelmente está vazia (ou seja, contém apenas zeros).
É por isso que muitas vezes as pessoas zeram a memória que acabaram de alocar (para evitar que os dados de lixo anteriores estraguem a lógica do programa).
Em algumas estruturas, pode haver tipos de dados especiais que zerem a memória alocada após a destruição. Em tal exemplo, está o SecureString do .NET.
Dito isto, a plataforma de programação que você usa ou o gerenciador de memória dos sistemas operacionais pode decidir que o zeramento de memória sempre deve acontecer. Então, isso realmente depende do seu ambiente.