- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找不到与此类似的问题,如果我错过了,请指导我!
我正在试验智能指针,并来到这个场景,我想保留 use_count()
返回的值在 shared_ptr 对象中设置为 1(练习优化代码)。这是我正在使用的一个片段:
#include <iostream>
#include <memory>
#include <vector>
// testFunc: displays the use_count of each shared ptr in the list
void testFunc(const std::vector<std::shared_ptr<int>> &list) {
// reference each shared ptr in the list and display their use_count
for (auto &elem : list) {
std::cout << elem.use_count() << std::endl;
}
} // testFunc()
int main() {
// allocate shared ptr instance of an int
auto sharedTest = std::make_shared<int>(11);
// allocate another shared ptr instance of another int
auto anotherSharedTest = std::make_shared<int>(22);
// use std::move to prevent another copy of the shared ptrs from being created
testFunc({ std::move(sharedTest), std::move(anotherSharedTest) });
return 0;
} // main()
这个程序的输出是
2
2
因为两个共享ptr的use_count都是2。谁能告诉我为什么我不能把它们保持在1?我怀疑将 vector “传递”给
testFunc
当整个 vector 被传递时,正在创建每个共享 ptr 的拷贝,但是这让我感到惊讶,因为我是通过引用传递 vector 。非常感谢任何输入!
最佳答案
问题是临时initializer_list<shared_ptr>
保留元素的拷贝,它一直存在到完整表达式( ;
)的结尾。
您无能为力,initializer_list
总是通过拷贝存储其元素。
作为解决方法,您可以预先构建 vector :
std::vector<std::shared_ptr<int>> list{std::move(sharedTest), std::move(anotherSharedTest)};
testFunc(list);
应打印
1 1
.
关于c++ - 保持 shared_ptr use_count() 为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67039285/
我正在尝试了解如何在 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
我是一名优秀的程序员,十分优秀!