home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c++.moderated      Moderated discussion of C++ superhackery      33,346 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 32,737 of 33,346   
   Balog Pal to All   
   Re: Singletons   
   16 Dec 12 07:27:31   
   
   From: pasa@lib.hu   
      
   On 12/14/2012 1:21 AM, Öö Tiib wrote:   
      
   > What is your original "CMySingleton"/singleton? The unmaintainable   
   > classes that I have seen were always the classes of singular objects   
   > with "godly" names ... Application, FolderTree, Document, Form1, View,   
   > DataBase, MainFrame and Manager. One of those?   
      
   I used two from that list. In MFC-based projects you start with theApp   
   that is instance of something derived from CApplication. I normally   
   tried to access all other app-tied singletons from here (settings, user   
   preferences, command line, etc).   Then I used the same practice for   
   other apps. Still fail to see any problem with it.   
      
   The other one is Database -- In a period I wrote many programs that   
   started with creating one ODBC connection with a database, and the job   
   was to read/write data in that. Again see no problem -- even for cases   
   where secondary connections were opened for some technical reasons.   
      
   > Free function fits best for (at least observably) immutable global   
   > state. With inlines and constexpr most overhead and inconvenience is   
   > reduced.   
   >   
   > Some languages demand a "doer" for every function even if there are   
   > none. That can be called "nonexistent global state". No such   
   > (stateless singletons) needed in C++.   
      
   IMO the Singleton patterns imply mutable state. Otherwise we face the   
   Monostate pattern, and it's counterproductive to mess them.  (monostate   
   covers both the stateless and immutable stuff).   
      
      
   > Two silly examples to illustrate   
   > what I mean:   
   >   
   >    threadId = std::this_thread::get_id();   
   >    threadId = ThreadingGenie::getInstance()->tellMeCurrentTheadId();   
   >   
   >    std::sort(names.begin(), names.end());   
   >    AlgorithmGenie::getInstance()->sort(names.begin(), names.end());   
   >   
   > Some languages do not have namespaces. Well ... C++ has. So if the   
   > singleton is actually whole module or package then use namespace.   
   >   
   > When having global state is still needed for some reason, especially   
   > when the reason was "convenience", then I am in difficulty to see real   
   > benefit of the global object accessed with static accessor function   
   > getInstance() versus simply accessing it directly by its name (like   
   > std::cout). The former feels both global state (bad) plus code bloat   
   > (not that convenient) to me.   
      
   I agree with all that.   
      
      
   --   
         [ See http://www.gotw.ca/resources/clcm.htm for info about ]   
         [ comp.lang.c++.moderated.    First time posters: Do this! ]   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca