Согласно этой справочной записи для оператора new (http://www.cplusplus.com/reference/std/new/operator%20new/):
Оператор глобальной динамической памяти функции являются стандартными в стандарте библиотека:
- Все три версии оператора new объявляются в глобальном пространстве имен, не в пространстве имен std.
- Первая и вторая версии неявно объявляются в каждом единица перевода на С++: заголовок не должен быть чтобы они присутствовали.
Мне кажется, что третья версия оператора new (размещение new) неявно объявляется в каждой единицы перевода программы на С++, а заголовок <new>
должен быть включен для ее присутствия. Это правильно?
Если да, то как это получается с использованием компиляторов g++ и MS VС++ Express, я могу скомпилировать код, используя третью версию нового без #include <new>
в моем исходном коде?
Кроме того, эталонная запись библиотеки MSDN Standard С++ для оператора new дает некоторый пример кода для трех форм оператора new, который содержит оператор #include <new>
, однако пример, похоже, компилируется и запускается точно так же для меня, без этого include
// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass( )
{
cout << "Construction MyClass." << this << endl;
};
~MyClass( )
{
imember = 0; cout << "Destructing MyClass." << this << endl;
};
int imember;
};
int main( )
{
// The first form of new delete
MyClass* fPtr = new MyClass;
delete fPtr;
// The second form of new delete
char x[sizeof( MyClass )];
MyClass* fPtr2 = new( &x[0] ) MyClass;
fPtr2 -> ~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
// The third form of new delete
MyClass* fPtr3 = new( nothrow ) MyClass;
delete fPtr3;
}
Может ли кто-нибудь пролить свет на это и когда и почему вам может понадобиться #include <new>
- может быть, какой-то примерный код, который не будет компилироваться без #include <new>
?
Спасибо.