Ellery Newcomer wrote: > On 02/28/2010 02:34 PM, sybrandy wrote: >> <snip> >> >> I have two questions for you: >> >> 1) Are class destructors not good enough? If so, why? > > They might be good enough, I don't know. I thought they wouldn't be > guaranteed to be called on scope exit, though. > >> >> 2) Have you looked into static destructors? I created a logging library >> and that worked perfect for me to ensure that if I killed the program >> via Ctrl-C, it would flush the output buffer and close the file handle. > > I'm not really looking at unexpected terminations > >> >> Personally, I really like the use of "scope" vs. RAII. Keeping the code >> to clean up a file handle or the like right by where it's declared seems >> very sensible to me. > > I like scope too. But it's still something the user has to remember. > >> >> Casey
Without RAII, it's likely something that they have to remember too. Unless they specifically call close or whatever it is that's supposed to be done when the object leaves scope, it won't happen. scope is just a better way to explicitly make it happen without worrying about things like exceptions. If you want to guarantee that something will be destroyed when it leaves scope, you're going to have to go with a struct, since that's guaranteed by the language - the user of your struct can't forget it like they can with scope and classes. I like scope, but it's something that the person using the class has to remember just like they'd have to remember to call the close function or its equivalent if there were no scope modifier. It's just the nature of classes. And really, it's not all that different from C++. It's just D's way of declaring classes on the stack but with the benefit that you're not passing objects around on the stack and incurring those copying costs. - Jonathan M Davis