私の知る限り、auto_ptr は所有権の譲渡の概念に基づいて機能します。また、自動ポインタがその所有権を別の自動ポインタに移すと、それが指しているオブジェクトを参照できなくなります。ただし、これは、以下のプログラムに示すように、私が見つけたケースではありません。何か不足していますか?助けてください。
#include <iostream>
#include <string>
#include <memory>
class A
{
public:
void display(){
std::cout << "Inside class A" << std::endl;
}
};
int main()
{
std::auto_ptr<A> p1(new A());
std::auto_ptr<A> p2;
std::cout << p1.get() << std::endl;
p2=p1;
std::cout << p2.get() << std::endl;
p2->display();
std::cout <<p1.get()<< std::endl; //Address of shows 0 as expected
p1->display(); //L1
std::auto_ptr<A> p3 = p1; //L2
std::cout << p3.get() << std::endl; //Address shows 0 as expected
p3->display();
return 0;
}
Output:
0x45a0620
0x45a0620
Inside class A
0
Inside class A
0
Inside class A
行 L1: p1 はもう所有権を持っていないので、これはどのように機能しますか?
行 L2: p1 はもう所有権を持っていないので、これはどのように機能しますか?