Вы еще используете Loki? Тогда мы идем к вам.
От: Denwer Россия  
Дата: 27.09.04 06:06
Оценка:
Вот вспоминаются мне разные топики, в которых люди говорят как хорошо использовать в проектах смарт поинтеры из библиотеки локи. Хотел добавить я их в свой проект(лень было нужные файлы дергать из буста, авесь буст тянуть громоздко), и вот что выяснилось. Оказывается нельзя создавать глобальные(статические) объекты Loki::SmartPtr<Object>, ну или даже внутри глобальных объектов. Вот например MFC активно использует глобальный объект класса приложения, так туда тоже нельзя добавить например такую строку std::vector<SmartPtr<Object>>. А собака порылась в том, что данный класс активно использует SmallObject, это такие объекты которые создаются в специальном буффере, а этот буффер удаляется через функцию atexit, вызов коллбека котрого происходит ДО вызова всех деструкторов глобальных объектов, и поэтому происходит ассерт, т.к. этот буффер используется еще.

ЗЫ: Вывод: использовать библиотеку можно только в консольных программах, где вся программа написана в одной функции main.
Re: Вы еще используете Loki? Тогда мы идем к вам.
От: korzhik Россия  
Дата: 27.09.04 06:16
Оценка:
Здравствуйте, Denwer, Вы писали:

>А собака порылась в том, что данный класс активно использует SmallObject, это такие объекты которые создаются в специальном буффере, а этот буффер >удаляется через функцию atexit, вызов коллбека котрого происходит ДО вызова всех деструкторов глобальных объектов, и поэтому происходит ассерт, т.>к. этот буффер используется еще.


А через соответствующий полиси настроить логику удаления там нельзя?

ЗЫ
самому смотреть лень
Re[2]: Вы еще используете Loki? Тогда мы идем к вам.
От: Denwer Россия  
Дата: 27.09.04 06:24
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, Denwer, Вы писали:


>>А собака порылась в том, что данный класс активно использует SmallObject, это такие объекты которые создаются в специальном буффере, а этот буффер >удаляется через функцию atexit, вызов коллбека котрого происходит ДО вызова всех деструкторов глобальных объектов, и поэтому происходит ассерт, т.>к. этот буффер используется еще.


K>А через соответствующий полиси настроить логику удаления там нельзя?


K>ЗЫ

K>самому смотреть лень


        RefCounted() 
        {
            pCount_ = static_cast<unsigned int*>(
                SmallObject<>::operator new(sizeof(unsigned int)));
            assert(pCount_);
            *pCount_ = 1;
        }


Вот кусок кода, где жестко прописано использование SmallObject. Единтсвенный вариант написать свой RefCounted.
Re[3]: Вы еще используете Loki? Тогда мы идем к вам.
От: korzhik Россия  
Дата: 27.09.04 06:30
Оценка:
Здравствуйте, Denwer, Вы писали:

>Единтсвенный вариант написать свой RefCounted.

только сам хотел тебе это предложить.

да вроде не сложно, или я чего то непонимаю:
  template <class P>
    class RefCounted
    {
    public:
        RefCounted() 
        {
            pCount_ = static_cast<unsigned int*>(::operator new(sizeof(unsigned int)));
            assert(pCount_);
            *pCount_ = 1;
        }
        
        RefCounted(const RefCounted& rhs) 
        : pCount_(rhs.pCount_)
        {}
        
        // MWCW lacks template friends, hence the following kludge
        template <typename P1>
        RefCounted(const RefCounted<P1>& rhs) 
        : pCount_(reinterpret_cast<const RefCounted&>(rhs).pCount_)
        {}
        
        P Clone(const P& val)
        {
            ++*pCount_;
            return val;
        }
        
        bool Release(const P&, bool = false)
        {
            if (!--*pCount_)
            {
                ::operator delete(pCount_, sizeof(unsigned int));
                return true;
            }
            return false;
        }
        
        void Swap(RefCounted& rhs)
        { std::swap(pCount_, rhs.pCount_); }
    
        enum { destructiveCopy = false };

    private:
        // Data
        unsigned int* pCount_;
    };
Re[4]: Вы еще используете Loki? Тогда мы идем к вам.
От: Denwer Россия  
Дата: 27.09.04 06:40
Оценка:
Здравствуйте, korzhik, Вы писали:

Из серии, взять что то и доработать самому напильником. Я такие варианты не особенно уважаю, т.к. малоли какие измененения будут в след версии локи, а во-вторых малоли где еще могуть встречаться эти SmallObject.
Re[5]: Вы еще используете Loki? Тогда мы идем к вам.
От: korzhik Россия  
Дата: 27.09.04 06:43
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Здравствуйте, korzhik, Вы писали:


D>Из серии, взять что то и доработать самому напильником. Я такие варианты не особенно уважаю, т.к. малоли какие измененения будут в след версии локи, а во-вторых малоли где еще могуть встречаться эти SmallObject.


хозяин барин, как говорится.
но стратегии для того и придумали чтобы можно было немножечко дорабатывать напильничком.
Re[5]: Вы еще используете Loki? Тогда мы идем к вам.
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 27.09.04 06:43
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Здравствуйте, korzhik, Вы писали:


D>Из серии, взять что то и доработать самому напильником. Я такие варианты не особенно уважаю, т.к. малоли какие измененения будут в след версии локи, а во-вторых малоли где еще могуть встречаться эти SmallObject.


Вся Loki построена именна на такой идеологии: если тебя что-то не устраивает, допиши сам. Это тебе и позволяют полиси сделать. Почитай книгу Александреску насчёт этого .
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[6]: Вы еще используете Loki? Тогда мы идем к вам.
От: Denwer Россия  
Дата: 27.09.04 06:54
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>Здравствуйте, Denwer, Вы писали:


D>>Здравствуйте, korzhik, Вы писали:


D>>Из серии, взять что то и доработать самому напильником. Я такие варианты не особенно уважаю, т.к. малоли какие измененения будут в след версии локи, а во-вторых малоли где еще могуть встречаться эти SmallObject.


MN>Вся Loki построена именна на такой идеологии: если тебя что-то не устраивает, допиши сам. Это тебе и позволяют полиси сделать. Почитай книгу Александреску насчёт этого .


Если бы мне нужна другая идея по поводу полиси, это одно, но когда мне нужна таже самая идея, но которая не работает это уже другое.

ЗЫ: А в книге, насколько я помню, эта ситуация не описывалась, т.е.баговая реализация RefCounted.
Re[7]: Вы еще используете Loki? Тогда мы идем к вам.
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 27.09.04 08:19
Оценка:
Здравствуйте, Denwer, Вы писали:

MN>>Вся Loki построена именна на такой идеологии: если тебя что-то не устраивает, допиши сам. Это тебе и позволяют полиси сделать.


D>Если бы мне нужна другая идея по поводу полиси, это одно, но когда мне нужна таже самая идея, но которая не работает это уже другое.


Она не работает так, как это надо вам, поэтому это уже другая идея.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.