- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想出了下面的例子
std::shared_ptr<foo> a(new foo());
{
std::shared_ptr<foo> b = a;
std::cout << "before" << b.use_count() << "\n"; //returns 2
b.reset();
std::cout << "after" << b.use_count() << "\n"; //returns 0
}
std::cout << "Finished\n";
现在在上面的代码中,第二个 use_count
语句返回零。在那种情况下,析构函数不应该在打印出 "Finished"
之前被调用。为什么第二条语句中的 use_count 打印为 0 ?我读到 use_count 的定义是:
Returns the number of shared_ptr objects that share ownership over the same pointer as this object (including it).
如果我在使用计数之前执行了一个reset()
,这仅仅意味着它的引用计数减少了 1。如果我错了请纠正我。
以上是我的理解,如有错误请指正
std::shared_ptr<foo> a(new foo()); //reference count is 1
{
std::shared_ptr<foo> b = a; //reference count becomes 2
std::cout << "before" << b.use_count() << "\n"; //returns 2 //OK this I understand
b.reset(); //b smart pointer gives up its reference count so now it should be 1.
std::cout << "after" << b.use_count() << "\n"; //This should be 1 why is it 0 ?
}
std::cout << "Finished\n";
所以我的问题是为什么 b.use_count()
返回 0 ?
最佳答案
b.reset();
之后,b
为空(即不指向任何对象)。
根据标准(引用自N4527 §20.8.2.2.5[util.smartptr.shared.obs])
long use_count() const noexcept;
7 Returns: the number of
shared_ptr
objects,*this
included, that share ownership with*this
, or0
when*this
is empty.
关于c++ - 了解 use_count 与 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847540/
我正在尝试了解如何在 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
我是一名优秀的程序员,十分优秀!