为什么std::shared_ptr提供operator<<?

4

std::shared_ptr提供了operator<<,它只是将其地址写出。没有operator>>,只记录了地址而没有内容。我想知道在哪些情况下它有用。


3
所以您可以像使用裸指针一样使用“std::cout << ptr”。 - stijn
6
操作符 >> 可能会做什么?原始指针也不支持该操作符。 - user2100815
1
@NeilButterworth:std::basic_istream有一个operator>>(void*& value),用于读取原始指针。这可能对于shared_ptr来说是危险的,尽管可以从原始指针构造一个shared_ptr,因此创建一个operator>>以直接赋值给shared_ptr并不是不可能的。虽然如果需要自定义删除器,则无法使用该方法,您必须先读取指针,然后使用它构造一个新的shared_ptr,以便您可以指定删除器。 - Remy Lebeau
我猜这更多是为了调试/记录目的,而不是其他原因。将地址打印出来可能对某些调试器有帮助。 - madduci
1个回答

0

因为在原始指针上,<< 可能是一个潜在有用的事情。它是安全的,这也是原始指针所做的,而 shared_ptr 应该在某些情况下用来替换原始指针。

相比之下,>> 很少有意义。与原始指针不同,将指针值存储在共享指针中会占有它。

我可以使用 some_stream >> raw_ptr,除非我对 ptr 做一些操作,否则不会出现任何问题;有点奇怪,但没有立即出现错误。

对于 shared_ptr 来说,做同样的事情只有在极端的玄学情况下才是安全的。在这些情况下,必须先填充原始指针,然后将其加载到共享指针中,这似乎并不是一个过于繁琐的要求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接