1

私は SFML をいじり、単純な 2D ゲームを構築する方法を考え出しました。この動作に気付いたばかりで、何が起こっているのかわかりませんでした。私を混乱させているサンプルコード:

struct Unique {};

class Shared {
public:
    Shared() {
        p = make_unique<Unique>();
    }
    unique_ptr<Unique> p;
};

void SharedCopyTest() {
    Shared foo;
    //Shared copy = foo;    // Error: function "Shared::Shared(const Shared &)" 
                            // (declared implicitly) cannot be referenced 
                            // -- it is a deleted function

    shared_ptr<Shared> sharedPtr = make_shared<Shared>();
    shared_ptr<Shared> ptrCopy = sharedPtr; // No error
}

この時点で、&sharedPtr->p == &ptrCopy->p; pがタイプの場合、どうすれば可能unique_ptr<T>ですか?

4

1 に答える 1

2

のセマンティクスはstd::shared_ptr、ポイント先のオブジェクトのコピーが作成されないということです。代わりに、std::shared_ptrコピーされるのはオブジェクト自体であり、共有ポインターの使用カウンターが増加します。

Sharedオブジェクトのコピーを実際に作成していないため、これが機能する理由です。

getこれは、共有ポインター関数を使用して「生の」ポインターを取得することで簡単に確認できます。

sharedPtr.get() == ptrCopy.get()
于 2018-06-02T02:29:27.647 に答える