Was ist der „richtige“ Weg, um malloc und new in einem gemischten C / C ++ - Programm in Einklang zu bringen?

Ich habe ein gemischtes C / C ++ - Programm. Es enthält einen Flex / Bison-Parser, der auf C abzielt, während der Rest C ++ ist.

Als C verwalten der generierte Parser und Scanner ihren Speicher mitmalloc, realloc undfree. Sie sind gut genug, um Hooks freizulegen, mit denen ich meine eigenen Implementierungen dieser Funktionen einreichen kann. Wie zu erwarten, "möchte" der Rest des (C ++) - Programmsnew, delete, usw.

Ein bisschen Nachforschungen scheinen zu zeigen, dass die einschlägigen Normen nicht garantieren, dass ein solches Mischen funktionieren sollte. Insbesondere der C "Heap" ist nicht unbedingt der C ++ "freie Bereich". Es scheint, als könnten sich die beiden Schemata gegenseitig mit Füßen treten.

Darüber hinaus wird dieses Programm eines Tages (bald) wahrscheinlich eine angepasste Heap-Implementierung integrieren wollen, wie ztcmalloc, wird sowohl von C als auch von C ++ verwendet.

Was ist hier das "Richtige"?

Aus dem Wunsch heraus, tcmalloc (in dem erklärt wird, wie man mit C-Programmen verknüpft) in die C ++ - Speicherverwaltung zu integrieren, bin ich versucht, eine Art Cross-Type-Cross-Thread-Cross-Everything-Überladung / Hook / whatever zu finden. Damit könnte ich alle C ++ - Zuordnungs- / Freigabeaufrufe auf ihre C-Äquivalente zurückführen (die wiederum auf tcmalloc landen).

Gibt es einen solchen pan-galaktischen globalen C ++ - Hook? Könnte es schon sein, was ich will, ähnlich wieios_base::sync_with_stdio heiratet heimlich iostream und stdio standardmäßig?

Ich bin nicht daran interessiert, über stdio vs. iostreams zu sprechen, noch über das Umschalten von Parsergeneratoren oder die Verwendung der C ++ - Flex / Bison-Skelette (sie verursachen eigenständige Kopfschmerzen).

BEARBEITEN: Bitte geben Sie die Namen der Abschnitte des C ++ - Standards an, die Ihre Antwort unterstützen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage