У меня проблема с размещением нового оператора. У меня есть две программы: Program1 (operator.cpp) и Program2 (main.cpp):
Программа1: operator.cpp
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;
}
Вот вторая программа, с которой связана первая:
main.cpp:
#include <new>
int main()
{
int *ptr=new int;
int *ptr1=new(ptr) int(10);
}
Я индивидуально компилирую operator.cpp и main.cpp, как показано:
operator.cpp: g++ -g -c -o operator operator.cpp
Затем связать его с main.cpp:
g++ -g -o target operator main.cpp.
Удивительно, но когда я выполняю «./target», он печатает: «Из нормального нового».
Ожидаемый результат: от нормального нового
С размещения нового.
Однако, если новое и основное размещение помещены в один и тот же файл, вывод будет таким, как ожидалось: Из нормального нового, Из нового размещения
Может кто-нибудь помочь мне с этим? Этот материал связан с моей официальной работой и очень срочен.