配置の新しい演算子に問題があります。Program1 (operator.cpp) と Program2 (main.cpp) の 2 つのプログラムがあります。
プログラム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;
}
以下は、最初のプログラムがリンクされている 2 番目のプログラムです: 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」と出力されます。予想される出力は次のとおりです。
通常新規より 配置新規より
ただし、placement new と main が同じファイル自体に配置されている場合、出力は期待どおりになります。
通常新品より、 配置新品より。