zurückgegebenen ausgerichteten Speicher mit neuen?

8

Ich speichere derzeit meinen Speicher für Arrays mit dem MS-spezifischen mm_malloc. Ich richte die Erinnerung aus, da ich einige Rechenaufgaben mit hoher Belastung erledige und die Vektorisierung die Ausrichtung ausnutzt. Ich frage mich, ob jemand weiß, wie man den neuen Operator überlädt, um das Gleiche zu tun, da ich mich überall schmutzig fühle (und irgendwann auch gerne unter Linux kompilieren würde)? Danke für jede Hilfe

    
Steve 17.04.2010, 21:05
quelle

2 Antworten

10

Zuallererst ist es wichtig zu beachten, dass new und delete entweder global oder nur für eine einzelne Klasse überladen werden können. Beide Fälle werden in diesem Artikel angezeigt. Beachten Sie auch, dass Sie, wenn Sie new überladen, fast sicher auch delete überladen wollen.

Es gibt einige wichtige Hinweise zu operator new und operator delete :

  1. Der C ++ - Standard erfordert, dass ein gültiger Zeiger zurückgegeben wird, auch wenn die übergebene Größe 0 ist.
  2. Es gibt auch operator new[] und operator delete[] , also vergiss nicht, diese zu überladen.
  3. Abgeleitete Klassen erben operator new und ihre Brüder, stellen Sie also sicher, dass diese überschrieben werden.

In Effektives C ++ , Punkt 8, Scott Meyers enthält einige Pseudo-Beispiele:

%Vor%

Für weitere Informationen würde ich definitiv Effektives C ++ auswählen.

    
rlbond 17.04.2010, 21:08
quelle
2

new wird benötigt, um pointer [...] suitably aligned so that it can be converted to a pointer of any complete object type (§3.7.3.1 des Standards) zurückzugeben.

FWIW, C ++ 0x fügt ein alignof hinzu, das Ihnen die für einen bestimmten Typ erforderliche Ausrichtung anzeigt.

    
Jerry Coffin 17.04.2010 21:13
quelle

Tags und Links