0

私の知る限り、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 はもう所有権を持っていないので、これはどのように機能しますか?

4

1 に答える 1