Standardowy C++ umożliwia nadpisanie ::operator new
. Chociaż implementacja jest z pewnością chaotyczna i związana z linkerem, program C++ może po prostu zdefiniować inny ::operator new
i działa. Standard C++ wyraźnie mówi: Programy mogą zastąpić je własnymi definicjami (itd. Itd. Różne ograniczenia i szczegóły).
malloc
Z drugiej strony jest zwykłą funkcją zdefiniowaną w zwykłej bibliotece, a C (i C++, jeśli o to chodzi) nie ma możliwości zastąpienia takiej funkcji. Możesz przekonać praktycznie każdy linker pod słońcem, aby połączyć się z twoim libc
sans i rozwiązać odniesienia do malloc
do jakiegoś kodu z innego pliku biblioteki/obiektu. Ale nie możesz po prostu zdefiniować innych funkcji, ponieważ narusza to zasadę jednej definicji: kończy się to na dwóch funkcjach zwanych "malloc" w programie, co jest zabronione przez standard (dla nie-static
, nieanonimowe - namespace
, non-inline
, ... funkcje) i poważny problem dla łączników (najprawdopodobniej błąd lub jedna z dwóch definicji zostanie usunięty).
Ten sam powód, dla którego można przesłać dalej, deklaruje, jeśli masz tylko wskaźnik, ale potrzebujesz pełnego włączania, jeśli masz instancję obiektu. http://stackoverflow.com/questions/553682/when-can-i-use-a-forward-declaration?rq=1 – CoryKramer
Oświadczenie z połączonej odpowiedzi mówi "3. new ma koncepcję new_handler, dla której nie ma odpowiednika Malloc. ". IMHO, które nie jest w 100% prawdziwe. Zwykle jest kilka słabych symboli zadeklarowanych w bibliotece underyling c, które mogą być _ overridden_ z twoimi własnymi implementacjami (zobacz np. ['_sbrk'] (http://en.wikipedia.org/wiki/Sbrk)). Zadeklarowane słabe symbole niekoniecznie muszą zawierać słowo "linker". –