Если вам охота попудрить мозги С++-ом, читайте дальше
А подскажите мне кто-нибудь более "гурнутый", чем я, как работает следующая ситуация.
Допустим у меня есть два класса. Пусть один из них будет Одиночкой (можно и глобальным для простоты, но это уже не модно
Код: Выделить всё
class Singleton
{
Client *m_client; // см. ниже
public:
static Singleton* self(); // Одиночка же;)
void changeClient()
{
delete m_client; m_client=0;
// ...... возможно действия по созданию нового Client-а
}
};
И есть класс:
class Client
{
public:
void someFunction()
{
Singleton::self()->changeClient();
}
};Как это отработает? То есть, что будет, если я из одного класса (Client) вызову метод другого (Singleton::changeClient()), который удалит объект первого класса (Client)?
Только что написал тестовую программку - все работает. В смысле не слетает. И даже если я после вызова changeClient() в someFunction() поставлю cout<<this, работает.
Работает-то работает, но что по этому поводу говорит стандарт?
В частности, интересуют две ситуации:
а) После вызова changeClient() в someFunction() следуют еще какие-то действия
б) Вызов changeClient() - последний в someFunction();
Возможно, а) рискованно, но как насчет б)?
Нормально так делать или лучше забабацать какой-нибудь сборщик ненужных объектов?
А может я переработал и все это очевидно