- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在下面的代码片段中:
shared_ptr<int> p;
{
p = shared_ptr<int>(new int);
cout<<p.use_count()<<endl;
}
cout<<p.use_count()<<endl;
输出结果为
11
我不明白为什么第一个输出是1
——它不应该是2
吗?
最佳答案
临时对象的生命周期不足以让第一个 p.use_count()
返回 2。临时对象首先被销毁,放弃其拥有的任何东西的所有权。
此外,由于临时变量是一个右值,因此对 p
的赋值将导致移动赋值,这意味着无论如何使用计数永远不会是 2(假设实现质量)。所有权只是从临时转移到 p
,永远不会超过 1。
关于c++ - shared_ptr 和 use_count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920659/
我正在尝试了解如何在 C++ 中使用 std::shared_ptr。但这很令人困惑,我不明白如何创建指向同一对象的多个共享指针。甚至文档和在线资料也不是很清楚。 以下是我编写的一小段代码,用于尝试理
我定义并分配了 2 个 shared_ptr nullptr。在情况 1 中,我使用默认构造函数,在情况 2 中,我使用带有 delete 方法的构造函数。 shared_ptr sptr2(null
在下面的代码片段中: shared_ptr p; { p = shared_ptr(new int); cout<
我的申请问题如下- 我有一个大结构 foo。因为它们很大并且出于内存管理的原因,我们不希望在数据处理完成后删除它们。 我们将它们存储在 std::vector>. 中 我的问题与了解所有处理何时完成有
我想出了下面的例子 std::shared_ptr a(new foo()); { std::shared_ptr b = a; std::cout a(new foo());
有人可以帮我解决为什么输出是 2 而不是 3 吗?谢谢。 int main() { std::shared_ptr x(new int); std::shared_ptr const&
我找不到与此类似的问题,如果我错过了,请指导我! 我正在试验智能指针,并来到这个场景,我想保留 use_count() 返回的值在 shared_ptr 对象中设置为 1(练习优化代码)。这是我正在使
我有一个嵌套的 boost::shared_ptr,当它被分配给另一个并超出范围时,它偶尔会被破坏。我发现 use_count 没有更新,除非我将指针复制到临时文件。代码是不言自明的。在第一个 for
我正在实现一个线程安全的“惰性同步”集合,作为由 shared_ptr 连接的节点的链表。该算法来自“多处理器编程的艺术”。我正在添加一个 is_empty() 函数,它需要与现有函数线性化:cont
我有两个 shared_ptr 指向相同的 int,即对它们调用 get() 返回相同的地址。但是对它们调用 use_count() 会返回 1。当它们中的最后一个超出范围时,它会尝试释放已经被另一个
以下代码: #include #include #include struct Foo{ Foo(): m_p(std::make_shared()) {}
我很好奇 shared_ptr 在 lambda 中被值捕获时的生命周期。 我原以为只要 lambda 仍在内存中,它的 use_count() 就始终 >= 1,但我的测试显示出一些意外情况:使用计
来自cppref : Notes An empty shared_ptr (where use_count() == 0) may store anon-null pointer accessible
我一直假设 std::shared_ptr 上的 std::move() 窃取指针并将原始指针设置为 nullptr - 因此不会增加引用计数。在我的世界里这似乎不是真的。 设置: MacOS,g++
我正在阅读 boost::shared_ptr 源代码,发现它使用这个函数来增加 shared_ptr 的使用计数(引用计数): inline void atomic_increment( int *
shared_ptr 观察者 20.8.2.2.5 C++14 最终草案 (n4296) long use_count() const noexcept; Returns: the number
我有一个使用 boost::shared_ptr 的程序s,特别是依赖于 use_count 的准确性执行优化。 例如,假设一个加法运算有两个参数指针 lhs 和 rhs。假设他们都有类型 share
在下面的代码中,我希望 shared_ptr 的 use_count() 移入 std::async 成为 1: #include #include #include using namespa
我是一名优秀的程序员,十分优秀!