私が知る限り、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に所有権がもうないので、これはどのように機能しますか?
「auto_ptr」はもう使用しないでください。現在は推奨されていません。 ['std :: shared_ptr'](http://en.cppreference.com/w/cpp/memory/shared_ptr)や[' std :: unique_ptr'](http://en.cppreference.com)を使うことができます。/w/cpp/memory/unique_ptr) – NathanOliver
@ NathanOliverはい。合意したしかし、まだ問題は残っています。あなたは好奇心から言うかもしれません。ありがとう! –
関連:http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in-undefined-beha – NathanOliver