gpt4 book ai didi

c++ - std::bind std::shared_ptr 参数不会增加 use_count

转载 作者:可可西里 更新时间:2023-11-01 18:28:16 25 4
gpt4 key购买 nike

以下代码:

#include <stdio.h>
#include <memory>
#include <functional>

struct Foo{
Foo():
m_p(std::make_shared<int>())
{}
Foo(const Foo &foo)
{
printf("copy\n");
}
std::shared_ptr<int> m_p;
};

void func(Foo foo)
{}

int main()
{
Foo foo;
std::function<void (void)> f = std::bind(func, foo);
printf("use count : %ld\n", foo.m_p.use_count());
f();
}

得到结果:

copy
copy
use count : 1
copy

由于复制了Foo,所以我认为m_p的use_count应该是2。

我正在使用 clang++

Apple LLVM 版本 5.0 (clang-500.2.79)

我在 Debug模式下编译代码。

最佳答案

您的代码有两个问题。

首先,你的复制构造函数没有复制m_p:

Foo(const Foo &foo):
m_p{foo.m_p}
{
printf("copy\n");
}

其次,您的 bind 产生了一个立即被丢弃的临时文件;您应该捕获它(例如,捕获到 auto 中):

auto bar = std::bind(func, foo);

关于c++ - std::bind std::shared_ptr 参数不会增加 use_count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977531/

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