Ich habe ein Problem mit der Platzierung neuer Operator. Ich habe zwei Programme: Program1 (operator.cpp) und Program2 (main.cpp): Program1: operator.cppBezüglich Platzierung neu in C++
void *operator new(size_t size)
{
void *p;
cout << "From normal new" << endl;
p=malloc(size);
return p;
}
void *operator new(size_t size, int *p) throw()
{
cout << "From placement new" << endl;
return p;
}
Hier ist das zweite Programm, zu dem die ersten verbunden: main.cpp:
#include <new>
int main()
{
int *ptr=new int;
int *ptr1=new(ptr) int(10);
}
ich individuell operator.cpp und main.cpp bin Kompilieren wie gezeigt:
operator.cpp: g++ -g -c -o operator operator.cpp
verbindet sie dann mit main.cpp:
g++ -g -o target operator main.cpp.
Überraschenderweise, wenn ich "./target" ausführe es druckt: "Von normal neu". Die erwartete Ausgabe ist: Von normal neu Von Platzierung neu.
Wenn jedoch die Platzierung neue und die wichtigsten in der gleichen Datei gesetzt werden selbst dann wird die Ausgabe wie erwartet: Von normalen neuen, von Platzierung neuer
Kann mir jemand bitte helfen in Bezug auf das? Dieses Zeug steht mit meiner offiziellen Arbeit in Verbindung und ist sehr, sehr dringend.
Es tut mir leid, aber ich mit Ihnen nicht einverstanden sind. Es verbietet, die tatsächliche Platzierung neu zu überladen: void * operator new (size_t size, void * p). Aber wir können void * in int * überladen und es überladen. Ich habe es in einer einzigen Datei versucht und es hat funktioniert. Es zeigt "Von Platzierung neu". Warum dann beim Verknüpfen, das Gleiche mit einer anderen Datei, ist es nicht? – kingsmasher1
@ kingsmasher1 Re "ich stimme nicht zu", vielleicht interpretierst du "die oben gezeigte Funktion falsch". Stellen Sie am Ende eine Frage, da Ihre Funktion in [main.cpp] nicht deklariert ist. Sag es einfach. Cheers & hth., –
@ kingsmart: weil, wenn Sie sie in separaten Dateien haben, Sie nicht überladen, da es keine überladene Deklaration in main.cpp –