我注意到有关shared_ptr的奇怪事实
int* p = nullptr;
std::shared_ptr<int> s(p); // create a count (1).
std::shared_ptr<int> s2(s); // count go to 2.
assert(s.use_count() == 2);
我想知道除此之外的语义是什么。为什么s和s2共享一个nullptr?它有意义吗?
或许这种不常见的情况不值得if语句(代价高昂?)?
感谢任何启发。
答案 0 :(得分:3)
语义是:
nullptr_t
构造一个指针,它就是空的;也就是说,它没有任何指针。所以你的例子不是空的;它拥有一个空指针。
答案 1 :(得分:1)
谁在乎他们正在分享nullptr
?一旦它们都被摧毁,它们将尝试delete nullptr;
,这将无效。这完全没问题,并且符合shared_ptr
的语义。
对于空指针值不需要特殊情况的方式是有道理的。它是否出现在你的代码中只取决于你是否有一些函数可以接受或返回null shared_ptr
。
答案 2 :(得分:0)
shared_ptr将计算并释放它给出的任何指针(不仅是nullptr,还有一些无效的东西)。所以在你的例子中,这将最终删除nullptr,这是有效的情况。 Is it still safe to delete nullptr in c++0x?