Uso de eliminar en punteros pasados ​​como argumentos de función

¿Está bien (y es legal) eliminar un puntero que se ha pasado como un argumento de función como este:

#include<iostream>

class test_class{
public:
    test_class():h(9){}
    int h;
    ~test_class(){std::cout<<"deleted";}
};

void delete_test(test_class* pointer_2){
    delete pointer_2;
}

int main(){
    test_class* pointer_1;

    while(true){
        pointer_1 = new test_class;

        //std::cout<<pointer_1->h;

        delete_test(pointer_1);
    }
}

Esto compila bien ahora, pero solo quiero asegurarme de que siempre será así.

Respuestas a la pregunta(7)

Su respuesta a la pregunta