yigal_s' Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Wednesday, January 25th, 2006

    Time Event
    1:30p
    программистское
    попал на забавный клин в синглетоне: функция getInstance() может быть вызвана из-под конструктора, вызваного опять же из функции getInstance() для того же самого класса. Не обязательно напрямую, разумеется, а через цепочку вызовов. В моём случае всё было еще сложнее: getInstance() обратилась к кому-то там через COM, и пока вызов отрабатывался, в тот же тред пришел другой COM-вызов (вот не понимаю, зачем микрософт такое разрешил), приведший к новому вызову getInstance().

    Иными словами
    1. функция getInstance для класса T вызвается в самый первый раз
    2. вызывается конструктор класса Т
    3. конструктор вызывает еще что-то-там
    4. что-то-там вызывает getInstance для класса Т


    Вроде бы, ни в одной книжной имплементации синглетона я не видел защиты от подобного сценария, или упоминания о нём.

    << Previous Day 2006/01/25
    [Calendar]
    Next Day >>

About LJ.Rossia.org