É permitido gravar uma instância de Derivado sobre uma instância de Base?

Diga, o código

    class Derived: public Base {....}

    Base* b_ptr = new( malloc(sizeof(Derived)) ) Base(1);
    b_ptr->f(2);
    Derived* d_ptr = new(b_ptr) Derived(3);
    b_ptr->g(4);
    d_ptr->f(5);

arece razoável e o LSP está satisfeit

Suspeito que esse código seja permitido padrão quando Base e Derivado forem POD e, caso contrário, não será permitido (porque o vtbl ptr é substituído). A primeira parte da minha pergunta é: indique a pré-condição precisa de uma substituição desse tip

Pode haver outras maneiras permitidas de sobrescreve

A segunda parte da minha pergunta é: existem outras maneiras? Quais são as pré-condições precisas?

UPDATE: Eu não quero escrever código como este; Estou interessado na possibilidade teórica (ou impossibilidade) desse código. Então, essa é uma pergunta "nazista padrão", não uma pergunta "como posso ...". (Minha pergunta foi movida para outro site de stackoverflow?)

UPDATE2 & 4: E os destruidores? A semântica suposta desse código é "A instância base é (destrutivamente) atualizada pela fatia da instância Derivada". Vamos supor, por uma questão de simplicidade, que a classe Base possui um destruidor trivia

UPDATE3: O mais interessante para mim éa validade do acesso viab_ptr->g(4)

questionAnswers(8)

yourAnswerToTheQuestion