Ну, нет никакого конструктора для базового указателя - в том смысле, что не существует функции, неявно вызванной для инициализации указателя.
Самое близкое, что вы можете получить, это использовать пользовательскую функцию оператора преобразования
class Entity
{
public:
operator int *();
};
Entity::operator int *()
{
// return something appropriate that is of type int *
}
// sample usage in a function somewhere
int *p = some_entity; // implicitly conversion that calls the operator int *()
int *another_p = static_cast<int *>(some_entity); // explicit conversion
int *yet_another_p = some_entity.operator int *();
Существуют варианты этого, в зависимости от того, какая форма const
необходима (например, если операторская функция не изменяет объект, на который она действует, она должна быть const
и может быть определена как operator const int *()
).
Необходимо убедиться, что указатель, возвращаемый функцией оператора, обрабатывается надлежащим образом. Если пользовательская операторная функция возвращает элемент some_entity
, ее нельзя использовать после прекращения существования some_entity
. Точно так же, если он использует динамическое выделение памяти (например, возвращает результат выражения new
), вызывающая сторона должна явно освободить эту память, чтобы избежать утечки памяти.