Вы можете вернуть ссылку, но только если она является статикой или частью объекта (то есть нет локальной переменной).
Вы также можете возвращать ссылку на объект класса:
class Singleton
{
private:
static Singleton *singleton = 0;
Singleton() // making the constructor private keeps others from creating their own instance
{
}
~Singleton() // making the destructor private keeps others from destroying their instance on their own
{
}
public:
static Singleton *GetPtr(void)
{
if(!singleton)
singleton = new Singleton();
return singleton;
}
static Singleton &GetRef(void)
{
return *GetPtr(); // dereference the pointer
}
static void Free(void)
{
if(!singleton)
return;
delete singleton;
singleton = 0;
}
}
Вы могли бы и вернуть константный указатель и/или ссылки, в зависимости от того, что вы хотите сделать с классом (как я не знаю, хотите ли вы просто запретить другим пользователям удалять или изменять). Просто имейте в виду, что есть способы обмануть это (const_cast<>()
).