에 의해 함수에 전달 된 후 무효가됩니다 :표준 : : auto_ptr은 내가 다음 예제 코드를 가지고 값
#include <iostream>
#include <auto_ptr.h>
class A
{
public:
A(){ std::cout << "A ctor" << std::endl;}
~A() {std::cout << "A dtor" << std::endl;}
void bar(){std::cout << "bar()" << std::endl;}
};
void foo(std::auto_ptr<A> a)
{
std::cout << "foo()" << std::endl ;
}
int main()
{
std::auto_ptr<A> a(new A());
a->bar();
return 0;
}
출력 : 지금은 foo(a)
, a
것 호출하는 경우
A ctor
bar()
A dtor
전화하기 전에 파괴된다. bar()
:
int main()
{
std::auto_ptr<A> a(new A());
foo(a);
a->bar();
return 0;
}
출력 : 왜 a
가 foo()
후 파괴되어
A ctor
foo()
A dtor
bar()
가 호출된다?
내가 참조foo
에 매개 변수를 전달하면 내가 이해하지 못하는 또 다른 한가지는,
a
가
foo()
를 호출 한 후 파괴되지 않습니다 것을
:
이void foo(std::auto_ptr<A> &a)
{
std::cout << "foo()" << std::endl ;
}
int main()
{
std::auto_ptr<A> a(new A());
foo(a);
a->bar();
return 0;
}
출력 :
A ctor
foo()
bar()
A dtor
은 어떻게 평생에 영향을 미치는 참조로 전달 하시겠습니까?
unique_ptr도 소유권을 이동합니다. 그의 경우에는 shared_ptr을 의미하지 않습니까? – user1810087
@itwasntpete 차이점은'std :: unique_ptr'에는 복사 생성자가 없으며 이동 복사 생성자 만 있다는 것입니다. 그래서 소유권을 이전하기 위해 인스턴스에'move'를 호출해야합니다 (또는 임시 또는 rvalue를 전달하십시오). 'shared_ptr'는'auto_ptr'의 올바른 대체물이 아닙니다. – juanchopanza