Хочу рассказать о давно известном факте, на который никогда не обращал внимания. Но знать его нужно, поэтому зафиксирую прямо тут и здесь.Что такое статические методы всем прекрасно известно. Чем статические методы отличаются от методов тоже понятно. Но! От меня долгое время ускользал тот факт, что некоторые методы всегда являются статическими, независимо от использования ключевого слова static. Это операторы new и delete. По своей природе они не могут работать с объектом, т.к. именно они выделяют память для будущего объекта и освобождают её после его удаления. Т.е. в момент их вызова объект ещё либо не создан, либо уже разрушен.Разработчики приняли очень правильное решение избавить программистов от потенциальных ошибок и сделали эти операторы статическими по умолчанию.В приведённом ниже коде операторы new и delete являются статическими методами, поэтому внутри них невозможно использовать указатель на объект this. new & delete.cpp 1
2
3
4
5
6
class Object
{
public:
void * operator new( size_t );
void operator delete( void * );
};
|