2

以下のコードでは、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 からコンパイラをアップグレードしなくても、希望する動作を実現する方法や回避策はありますか?

4

2 に答える 2