
Felipe Magno de Almeida wrote:
On 2/7/06, Giovanni P. Deretta <gpderetta@gmail.com> wrote:
[snip]
You could argue that as this is a useful behavior stream_socket should have pointer semantics by default and be reference counted. But you would force the space and time overhead of a shared_ptr to everybody (btw, shared_ptr still require dynamic allocation of the reference counter).
Yes and No. I'm arguing that it is a very useful behavior that should be supported by the library. The default I'm not quite sure, maybe yes (it is the safest choice, you wont be able to use the dangling socket without knowing it), maybe no (unnecessary overhead for the reference count). Or you believe that it shouldnt be supported by asio? Be in another library? A move_resource<>/shared_resource<> "smart pointer"?
Now we agree :) Yes, it is useful behaviour and probably should be supported directly by asio. But it should not be the default or at least the user should have the option. Along side the current non-copyable (but maybe movable) stream_socket asio could provide a stream_socket_ptr that would behave as if it were a shared_ptr to a stream_socket (that is, pointer semantics), but it wouldn't actually allocate a stream_socket (similar to the way an optional looks like a pointer but actualy is stack based). Would it work for you? I'haven't really thought much about it, so I'm certanly missing something. -- Giovanni P. Deretta