Я немного запутался в перегрузке оператора и удалении. Я написал несколько тест:C++ - оператор перегрузки new
#include <iostream>
using namespace std;
class Test
{
public :
Test()
{
cout << "Test - ctor" <<endl;
}
~Test()
{
cout << "Test - dtor" <<endl;
}
Test(const Test& t)
{
cout << "Test - copy ctor" <<endl;
}
Test& operator = (const Test& t)
{
cout << "Test - assiment operator" <<endl;
}
void* operator new(size_t size)
{
cout << "Test - operator new" <<endl;
return NULL;
}
void print()
{
cout << "print" << endl;
}
};
int main()
{
Test* t = new Test();
t->print();
return 0;
}
И выход:
Test - operator new
Test - ctor
print
Теперь, если я вернусь «NULL» от «нового», почему моя программа не вылетает, когда я взываю к печати функционировать? спасибо.
Это не имеет ничего общего с перегрузкой, это регулярное неопределенное поведение. Попробуйте 'Test * t = nullptr; t-> print(); 'и посмотреть, что происходит (или нет). – molbdnilo
UB - это UB. – George