私は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が存在すると、オブジェクトが自動的に削除されると思いました。