#include <memory>
#include <iostream>
using namespace std;
class MyClass
{
public:
int i;
MyClass(int s) {
i=s;
}
~MyClass() {
cout<<"This class has been destroied. "<<i<<endl;
}
void myFunc() {
cout<<"myFunc() done. "<<i<<endl;
}
};
int main()
{
auto_ptr<MyClass> ptr1(new MyClass(1));
auto_ptr<MyClass>ptr2(new MyClass(2));
ptr1->myFunc();
ptr2->myFunc();
cout<<"test 1 done\n"<<endl;
ptr2 = ptr1;
ptr2->myFunc();
//ptr1->myFunc();
cout<<"test 2 done\n"<<endl;
}
/*
$ ./a.out
myFunc() done. 1
myFunc() done. 2
test 1 done
This class has been destroied. 2
myFunc() done. 1
test 2 done
* */
上記ptr1->myFunc();
がコメントアウトされていない場合、結果は以下のようになります。しかし、私はそれを理解することはできません。その時点で ptr1 は破壊されていないと思います...誰がそれをさらに説明するのを助けることができますか?
$ ./a.out
myFunc() done. 1
myFunc() done. 2
test 1 done
This class has been destroied. 2
myFunc() done. 1
Segmentation fault (core dumped)