Bildiğim kadarıyla auto_ptr, sahiplik aktarimi kavramini çalistirir. Ayrıca, otomatik işaretçi sahipliğini başka bir otomatik işaretçiye aktardığında, artık işaret ettiği nesneyi kullanamaz. Ancak, aşağıdaki programda gösterildiği gibi bu durum böyle değil. Bir şey mi eksik? Lütfen yardım et.Otomatik İşaretçim, sahiplik aktarimindan sonra bile çalisiyor
#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
Satır L1: Bu nasıl çalışır, p1 artık sahip değil midir?
Satır L2: Bu nasıl çalışır, p1 artık sahip değil midir?
Artık 'auto_ptr' kullanmamalısınız. Şimdi kullanımdan kaldırıldı. Bir ['std :: shared_ptr'] (http://en.cppreference.com/w/cpp/memory/shared_ptr) veya [' std :: unique_ptr'] (http://en.cppreference.com) kullanabilirsiniz./w/cpp/bellek/benzersiz_ptr) – NathanOliver
@NathanOliver Evet. Kabul. Ancak soru hala devam ediyor. Meraktan bahsedebilirsin. Teşekkürler! –
ilgili: http://stackoverflow.com/questions/2474018/when-does-invoking-a-member-function-on-a-null-instance-result-in-undefined-beha – NathanOliver