4

C++11unique_ptrでは、オブジェクトの寿命は、次の (やや不自然な) 例のように、通常の範囲外に延長されているように見えます。

#include <iostream>
#include <memory>

using namespace std;

int main()
{
    unique_ptr<char> uPtr(nullptr);
    {
        char c = 'X';
        cout << "c = " << c << endl;
        uPtr.reset(&c);
        c = 'Y';
    }
    cout << "c = " << *uPtr << endl;

    return 0;
}

出力:
c = X
c = Y

通常はスコープの最後に解放される文字 c は、プログラムの最後まで存続します。2 番目の出力は「Y」で、unique_ptrがその値を単純にコピーしていないことを示しています。

何らかの方法で変数の寿命を延ばすことをお勧めしますか?
これは安全ですか、それとも参照と同じ危険を伴いますか?

4

1 に答える 1