From: "Daniel Frey" <[EMAIL PROTECTED]>
> Peter Dimov wrote:
> >
> > make_X(args) is typically equivalent to X<...>(args). However,
make_shared
> > is not equivalent to the corresponding constructor. The constructor
throws
> > an exception when the argument has expired(), and make_shared returns an
> > empty shared_ptr.
>
> Which is surprising, at least to me. OK, I'm sure it's documented, but
> documentation aside the code (and the interface) should speak for
> itself. You seem to think that the function's name is the reason for
> this surprise, but I don't think that any name will do in this case.

Perhaps, but some names are "less bad". It is a convention that make_* names
are constructor aliases; this is not the case here, so I conclude that
make_shared isn't a particularly good choice.

> The
> problem is that from a semantic point of view, this function will
> construct a smart pointer with a type, which is deduced from the
> function's argument. The argument's value is only taken if it is not
> expired, else the default value will be taken. get_shared_ptr doesn't
> express this to me and I can hardly imagine that any identifier will do.

>From semantic point of view, it's more like "This function will obtain a
shared_ptr to the object identified by the weak_ptr argument. If there is no
such object, an empty shared_ptr is returned."

To me, get_shared_ptr seems to express this a bit better than make_shared.
But I might be wrong.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to