我对放置新操作符有疑问。我有两个程序: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”时,它正在打印:“From normal new”。预期的输出是:
从正常新 从安置新
但是,如果放置 new 和 main 本身放在同一个文件中,则输出如预期:
从正常新,从安置新。