Да, вы добавили неявное преобразование в T*
, поэтому компилятор будет использовать его для сравнения с NULL.
Несколько других замечаний:
NULL
является сокращением для 0, так что это означает, что сравнение с 0 будет разрешено.(Однако это не так для других целочисленных значений. 0 - особенное.)
Ваш тип также может быть неявно использован в логических контекстах.То есть это допустимо:
Test test;
if (test)
{
// ...
}
C ++ 0x позволяет вам указать ключевое слово explicit
, чтобы операторы преобразования могли запретить подобные вещи.
Неявное преобразование в типы указателей часто довольно сомнительно.В дополнение к подводным камням преобразования, возникающим в неожиданных случаях, он может разрешать опасные ситуации, если объекту принадлежит возвращаемый указатель.Например, рассмотрим строковый класс, который допускает неявное преобразование в const char*
:
BadString ReturnAString();
int main()
{
const char* s = ReturnAString();
// Uh-oh. s is now pointing to freed memory.
// ...
}