gpt4 book ai didi

c++ - 空 shared_ptr 的语义

转载 作者:行者123 更新时间:2023-11-30 01:59:46 27 4
gpt4 key购买 nike

我注意到一个关于 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 语句(代价高昂?)?

感谢您的启发。

最佳答案

语义是:

  • 如果您默认构造一个共享指针,或从nullptr_t 构造一个共享指针,则它是空的;也就是说,它不拥有任何指针。
  • 如果您从原始指针构造一个指针,则它会获得该指针的所有权,无论它是否为空。我想这样做是出于您提到的原因(避免运行时检查),但我只能推测这一点。

所以你的例子不是空的;它拥有一个空指针。

关于c++ - 空 shared_ptr 的语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15867485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com