読者です 読者をやめる 読者になる 読者になる

亀岡的プログラマ日記

京都のベッドタウン、亀岡よりだらだらとお送りいたします。

std::shared_ptrとstd::unique_ptrの動きを知ろうといじったサンプルをアップしてみる。

C++
#include <iostream>
#include <memory>
class TestObject_shared
{
public:
    TestObject_shared()
    {
        std::cout << "shared_ptrコンストラクタ呼び出し" << std::endl;
    }
    ~TestObject_shared()
    {
        std::cout << "shared_ptrデストラクタ呼び出し" << std::endl;
    }
};

class TestObject_unique
{
public:
    TestObject_unique()
    {
        std::cout << "unique_ptrコンストラクタ呼び出し" << std::endl;
    }
    ~TestObject_unique()
    {
        std::cout << "unique_ptrデストラクタ呼び出し" << std::endl;
    }
};
int main (int argc, const char * argv[])
{
    std::shared_ptr<TestObject_shared> _sharedPointerCopied;
    {
        std::shared_ptr<TestObject_shared> _sharedPointer(new TestObject_shared());
        _sharedPointerCopied = _sharedPointer; // ここをコメントアウトすると、このスコープを抜けたらデストラクタが呼ばれる
    }
    
    {   
        std::unique_ptr<TestObject_unique> _uniquePointer(new TestObject_unique());
        
        //std::unique_ptr<TestObject_unique> _hoge = _uniquePointer; <-unique_ptrだから代入はできない
    }
    
    std::cout << "Hello, World!\n";
    return 0;
    //    出力:
    //    shared_ptrコンストラクタ呼び出し
    //    unique_ptrコンストラクタ呼び出し
    //    unique_ptrデストラクタ呼び出し
    //    Hello, World!
    //    shared_ptrデストラクタ呼び出し
}

(#゚Д゚) < いつも解説があると思ったら大間違いだぞ!!