Sans avoir plus de détail sur la sémantique de tes objets, ce n'est pas évident de te conseiller un design en particulier. Pourquoi a tu besoin de ça ?
Ça donne quand même l'impression d'un mauvais design et d'une mauvaise gestion des rôles et responsabilités de chaque classe, que C doive enregistrer quelle classe l'a créé. Il faudrait peut être revoir ton découpage des classes et les liens entre eux (avec effectivement éventuellement de l'héritage, toujours suivant la sémantique des choses).
Après tu as la solution bourine de simplement ajouter un paramètre (disons, un booléen) au constructeur de C, et quand tu l'appel depuis une méthode de A, de passer 'true', et quand tu l'appel depuis B, de passer 'false'. L'inconvénient, c'est que du coup c'est had hoc, et que le compilateur ne vérifiera pas que tu as effectivement appelé avec true depuis A et avec false depuis B. C'est donc assez casse gueule à maintenir quand tu rajouteras des appels au constructeur de C, et potentiellement source de bugs. Mais si tu veux vite régler ton problème, ça peut marcher.
Mais j'insiste, il doit y avoir un problème avec ton design. Après tu découvres le C++ (et surement l'orienté objet), donc c'est normal, et c’est pour ça que j'ai proposé une solution "sale" pour te débloquer rapidement.