EDYTOWANIE: Myślę, że rozwiązaniem, którego potrzebujesz, jest użycie innej implementacji STL, jeśli potrzebujesz używać MSVC 2015, a także unikaj ponownego wdrażania obecnego hackowania zarządzania pamięcią (przykro to nazywać to, ale tak to brzmi, ale potem ponownie użyłem kilku własnych hacków do pracy z MSVC).
Nigdy nie używałem implementacji STL, która nie była dołączona do środowiska programistycznego, ale jest to możliwe. Powinna to być prosta kwestia ustawienia ścieżek dołączania i bibliotek do alternatywnej implementacji STL. Możecie zacząć próbując STLPort
W przeciwnym razie, mój oryginalny porady dotyczące pytanie, przed ostatnim EDIT:
Static kolejność inicjalizacji w jednostce kompilacji (plik cpp) jest kolejność, w którym deklaracje są wykonane. Statyczny porządek inicjalizacji między jednostkami kompilacji jest niezdefiniowany. Nie używaj inicjalizacji statycznej do rozwiązania tego problemu.
Wygląda na to, że RustyX wskazuje w dobrym kierunku komentarzem do Overriding memory allocator in MSVC++.
EDYCJA: Wygląda na to, że szukana odpowiedź może być tutaj: How to properly replace global new & delete operators. Zauważ, że obie odpowiedzi są istotne, będziesz chciał zastąpić new
, delete
, new[]
i delete[]
. Ponieważ jest to stosowane podczas łączenia, najwyraźniej system Windows nie użyje ich do wczytanych bibliotek DLL (zobacz komentarze do pierwszej odpowiedzi).
Dlaczego zamówienie ma znaczenie? –
@ Cheersandhth.-Alf Ponieważ mój obiekt inicjuje niestandardowy system pamięci, jeśli niektóre inne obiekty wywołują nowe przed moim obiektem, powoduje to błąd. :( –
Tak więc aktualne pytanie brzmi - [jak zastąpić przydział pamięci w MSVC] (http://stackoverflow.com/questions/12815867/overriding-memory-allocator-in-msvc) – rustyx