以下のコードでは、use_count()
を にshared_ptr
移動しstd::async
ます1
。
#include <memory>
#include <iostream>
#include <future>
using namespace std;
void fun(shared_ptr<int> sp)
{
cout << "fun: sp.use_count() == " << sp.use_count() <<
" (in gcc 4.6.3, is there a way to make this 1?)\n";
}
int main()
{
auto sp1 = make_shared<int>(5);
auto fut = async(
launch::async,
fun,
move(sp1)
);
}
私のプラットフォームは gcc 4.6.3 を使用しており、上記のコードは次の出力 ( fun: sp.use_count() == 2
)を提供します。
fun: sp.use_count() == 2 (in gcc 4.6.3, is there a way to make this 1?)
coliru.stacked-crooked.comでは、希望する動作が得られます ( fun: sp.use_count() == 1
):
fun: sp.use_count() == 1 (in gcc 4.6.3, is there a way to make this 1?)
coliru がどのコンパイラを使用しているかはわかりませんが、gcc 4.6.3 よりも新しいものだと思います。
gcc 4.6.3 からコンパイラをアップグレードしなくても、希望する動作を実現する方法や回避策はありますか?