1

私はshared_ptrとweak_ptrについて学び始めています。理論的には、すべてが単純に見えます。しかし、私がテストを始めたとき、まあ...私はこの本当に単純なプログラムを持っています:

#include <iostream>
#include <memory>
using namespace std;

class Second
{
public:
    Second()
    {
        cout << "Second created" << endl;
    }
    ~Second()
    {
        cout << "Second deleted" << endl;
    }
};

class Main
{
public:
    shared_ptr<Second> second;
    Main()
    {
        cout << "Main created" << endl;
        second = make_shared<Second>(*(new Second()));
    }
    ~Main()
    {
        second.reset();
        cout << "Main deleted" << endl;
    }
};

void fun()
{
    shared_ptr<Main> main = make_shared<Main>(*(new Main()));
}

int main()
{
    cout << "Program started" << endl;
    fun();

    cout << "Program ended" << endl;
    return 0;
}

問題は、Second が削除されないことです。ここに私の出力があります:

Program started
Main created
Second created
Main deleted
Program ended

どうしたの?私がshared_ptrをリセットすると、その最後のshared_ptrが存在すると、オブジェクトが自動的に削除されると思いました。

4

2 に答える 2