Поиск:

Ответ в темуСоздание новой темы Создание опроса
> статические переменные, нюансы использования 
V
    Опции темы
Lazin
Дата 17.6.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(mes @ 17.6.2008,  12:53)
Цитата(Lazin @  17.6.2008,  12:44 Найти цитируемый пост)
А& GetA () { static A a; return a; }  


уже уничтожен...

в этом случае поможет синглтон... 


так в чем различие между  
Код

А& GetA () { static A a; return a; }  
и
class Singleton { 
public:
A& GetInstace ()  { static A a; return a; }  
};
 ?

Код

class Singleton { 
    A* val;
    public:
    Singletone() : val (0) {}
    A& GetInstace ()  
    {
        if (val == 0)
            val = new A();
        return *val;            
    }  
};


PM MAIL Skype GTalk   Вверх
DRUID3
Дата 17.6.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 463
Регистрация: 20.6.2005
Где: Kyyiv

Репутация: нет
Всего: 9



Цитата(UnrealMan @  17.6.2008,  11:42 Найти цитируемый пост)
Это inline-функция, с ней должен разобраться линкер - он оставит только одну функцию, которая во всех единицах трансляции будет одной и той же. Но, в принципе, тут могут быть косяки, можно попробовать пересобрать весь проект. 

??? это как??? smile 


--------------------
Every time if you use Linux, you are joined to the communism...
практика - критерий истины ... отделенной от нас пропастью субъективного восприятия...
PM MAIL WWW Skype   Вверх
Lazin
Дата 17.6.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



разница в управлении временем жизни

Добавлено через 1 минуту и 28 секунд
Цитата(mes @  17.6.2008,  12:56 Найти цитируемый пост)
само окно не является глобальным обэектом 

из твоего кода, это было непонятно.
PM MAIL Skype GTalk   Вверх
UnrealMan
Дата 17.6.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: нет
Всего: 32



Lazin, а кто будет вызывать delete? smile

Цитата(DRUID3 @  17.6.2008,  12:58 Найти цитируемый пост)
??? это как??? 

Что именно? Косяки с линковкой? Например, из-за путаницы с датировкой исходников. Может получиться так, что модифицированный исходник, который должен быть перекомпилирован, воспринимается как немодифицированный и в результате получаются не очень хорошие вещи.

PM MAIL   Вверх
Lazin
Дата 17.6.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(UnrealMan @  17.6.2008,  13:06 Найти цитируемый пост)
а кто будет вызывать delete? smile 

а никто smile

Добавлено @ 13:20
можно еще сделать объект общим... 
Код

class Singleton 

    boost::shared_ptr<A> val;
public:
    Singletone() : val (0) {}
    boost::shared_ptr<A> GetInstace ()  
    {
        if (val == 0)
            val = boost::shared_ptr<A>(new A());
        return val;            
    }  
};

но это все уже из области домыслов smile 

Это сообщение отредактировал(а) Lazin - 17.6.2008, 13:25
PM MAIL Skype GTalk   Вверх
mes
Дата 17.6.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Попробую собрать картину воедино:
проблема 1 : возникала из за  неопределенного порядка удаления статических объектов..  
точнее из за того что деструктор формы вызывался за пределами main. 

проблема 2: появлась " благодаря " недосмотру линкеру
при использовании слова inline ситуация имела повторение на другом участке кода (с другой стат. переменной)

за активную помошь приведшую к пониманию и решению проблемы +1, для активных участников 

всем спасибо ))

Это сообщение отредактировал(а) mes - 17.6.2008, 13:52


--------------------
PM MAIL WWW   Вверх
mes
Дата 20.6.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(Lazin @  17.6.2008,  12:58 Найти цитируемый пост)
Код

class Singleton { 
    A* val;
    public:
    Singletone() : val (0) {}
    A& GetInstace ()  
    {
        if (val == 0)
            val = new A();
        return *val;            
    }  
};
 


решил перечитать тему и наткнулся на этот код  - объясните, пожалуйста, с  какой такой стати класс приведенный выше является синглетном??


--------------------
PM MAIL WWW   Вверх
Lazin
Дата 23.6.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(mes @  20.6.2008,  18:01 Найти цитируемый пост)
решил перечитать тему и наткнулся на этот код  - объясните, пожалуйста, с  какой такой стати класс приведенный выше является синглетном?? 

ну это просто создание экземпляра объекта по требованию

Код

Singletone& get_singletone()
{
    static Singleton value;
    return value;
}


A& value ( get().GetInstance() );


но вообще это написано в спешке и на коленке))
PM MAIL Skype GTalk   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.0842 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.