std::shared_ptr
提供了operator<<
,它只是将其地址写出。没有operator>>
,只记录了地址而没有内容。我想知道在哪些情况下它有用。
std::shared_ptr
提供了operator<<
,它只是将其地址写出。没有operator>>
,只记录了地址而没有内容。我想知道在哪些情况下它有用。
因为在原始指针上,<<
可能是一个潜在有用的事情。它是安全的,这也是原始指针所做的,而 shared_ptr
应该在某些情况下用来替换原始指针。
相比之下,>>
很少有意义。与原始指针不同,将指针值存储在共享指针中会占有它。
我可以使用 some_stream >> raw_ptr
,除非我对 ptr
做一些操作,否则不会出现任何问题;有点奇怪,但没有立即出现错误。
对于 shared_ptr
来说,做同样的事情只有在极端的玄学情况下才是安全的。在这些情况下,必须先填充原始指针,然后将其加载到共享指针中,这似乎并不是一个过于繁琐的要求。
std::basic_istream
有一个operator>>(void*& value)
,用于读取原始指针。这可能对于shared_ptr
来说是危险的,尽管可以从原始指针构造一个shared_ptr
,因此创建一个operator>>
以直接赋值给shared_ptr
并不是不可能的。虽然如果需要自定义删除器,则无法使用该方法,您必须先读取指针,然后使用它构造一个新的shared_ptr
,以便您可以指定删除器。 - Remy Lebeau