▲ | sgsjchs 3 days ago | |||||||||||||||||||||||||
> Again, I don't see what this has to do with destructive moves. If you want a socket class that always refer to an open socket, you can already do that. Technically you can, but it's unreasonable to create an os-level socket just to put into the moved-out object where it will be immediately destroyed again. This is not an issue when the moves are destructive. > How is this supposed to work? The very point of your socket class is that it always contains a valid socket handle. Once you introduce a sentinel value, you are back to square one. If the optional class is able to construct a socket with the sentinel value, so is the user. That's not true. The sentinel value need not be exposed in the public interface of the class, it can only be accessible via the customization point of the optional. | ||||||||||||||||||||||||||
▲ | spacechild1 3 days ago | parent [-] | |||||||||||||||||||||||||
> Technically you can, but it's unreasonable to create an os-level socket just to put into the moved-out object where it will be immediately destroyed again. This is not an issue when the moves are destructive. No, the class can use a sentinel value internally only to mark moved-from objects. That's exactly where we actually started the conversation. That's why I said that destructive moves would only somewhat simplify the move operations, but not make a qualitative difference (in this area). > The sentinel value need not be exposed in the public interface of the class, it can only be accessible via the customization point of the optional. Since the optional would need to construct an instance with the sentinel value, I thought that the "sentinel" constructor must be public. However, you might be right that one could write a template specialization that contains the template argument as a friend class. In this case you could use a private constructor. Note that the destructor still has to handle the sentinel value... But I guess this is just something you have to accept. | ||||||||||||||||||||||||||
|