Boost logo

Boost Users :

From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2008-03-28 09:30:39


On Fri, Mar 28, 2008 at 1:59 PM, Patrick Loney <
Patrick.Loney_at_[hidden]> wrote:

>
> There are other classes that can't be used in containers such as
> scoped_ptr so there is precedent - stl containers aren't the be all and
> end all of software design.
>
> > Yes, well boost::noncopyable also prohibits something :-) The whole
> > intent of nondynamic is to prohibit (or make difficult) dynamic
> > allocation/pointer usage.
> > Do you think boost::noncopyable has a valid purpose, but nondynamic is
> > less useful?
>

All applications of noncopyable are clearly defined in my opinion. In case
of nondynamic it is not so.
If I declare a class as nondynamic I still probably can assume that it is
locally copyable. Isn't is so?

So this construct should be valid:

{ //local scope
    std::vector<some_nondynamic> local_collection;
    local_collection.push_back(some_nondynamic(params_here)); // BOOM!
Compiler error! new[] is not accessible or address is not accessible.
    ...
}

Do you see the problem here? Any user who deals with nondynamic must be
aware of the internal structure of some third-party class involved wheather
it will try to allocate storage for this class to copy it more efficiently.
So in other words, you would state: I allow you to copy, but it depends how
you do that...

Where in noncopyable you state: I disallow any copies.

IMO nondynamic will involve a whole bunche of exceptional rules when it can
be used or not, where from the point of view of an automatic variable this
should be valid or possible. So you break somehow natural semantics.

Best Regards,
Ovanes



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net