Se allochi il buffer con new[] lo devi deallocarore con delete[].

A parte questo: il modo più semplice è:
codice:
f_input1.open("input.txt",ios::in);  
f_output.open("output.txt",ios::out); 
f_input1 << f_output.rdbuf();

// close dei due file.
Se poi ti interessa il dietro le quinte è un altro discorso.