Boost logo

Boost :

From: Giora Unger (Giora_at_[hidden])
Date: 1999-12-28 12:55:01


Thanks for all the answers I received. I have some
new issues to raise:

1. Creation on stack
-----------------------------
It is clearly stated, and is reasonable, that Smart Pointers are good
only for dynamically allocated objects. Alas, a major problem can be
caused, if creation on stack is possible. Consider this:

void f()
{
        MyClass mc;
        boost::shared_ptr<MyClass> pmc(&mc);
        g(pmc);
        mc.DoSomething();
}

void g(boost::shared_ptr<MyClass> p_pMy)
{
        p_pMy->SetSomething();
}

The above code will result in a loud crash, of course.
I guess you already encountered the problem, and I'd like to know what's
your recommendation regarding the desired solution:
a. Shall I prevent stack creation ?! I don't think it's elegant. Am I wrong
?
b. Should conventions given to my programmers suffice ?

Any ideas are most welcomed.

2. Multi-threading
-------------------------
I see that the reason for non-thread-safe implementation is the platform
independence issue. OK.
So, I have a concrete question regarding my application, that uses the boost
smart pointers. I'm developing on WindowsNT, with MSVC++6.0.
I plan to use Win32 API critical sections, for making the shared_ptr
thread-safe
(as Dave wrote, it seems like the line discussed above is the only needed
change).
Is there any flaw in this ?
Andy - you said most compilers won't have a problem with the code I pointed
at. Do you know, by any chance, if MSVC++6.0 handles it correctly ?

3. User-defined conversions
----------------------------------------
Greg - I might have missed some previous discussions about this issue, but
I'd like to mention Scott Meyers excellent "More Effective C++",
item 5 (pages 24-31). He fiercely advocates for NOT using user-defined
conversions. I was convinced...

4. BOOST_NO_MEMBER_TEMPLATES
-----------------------------------------------------------
Dave suggested using
    #if defined(BOOST_NO_MEMBER_TEMPLATES) \
        || !defined( BOOST_NO_MEMBER_TEMPLATE_FRIENDS )
    private:

but no comments were given.
Actually, I commented out line 168 in config.h -
# define BOOST_NO_MEMBER_TEMPLATE_FRIENDS
and didn't notice any change in my test program (which includes the
basic boost test, and adds many more tests).

Do you think I shall use the above idea ?
What's the point in this variable anyway ?

Thank you all again,

------------------------------
Giora Unger
Radcom Ltd.
Tel.: 972-3-6455186
Fax: 972-3-6474681
------------------------------


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk