我有以下示例代码:
#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;
}
输出:
A ctor
bar()
A dtor
现在,如果我调用foo(a)
,a
将在调用之前被破坏bar()
:
int main()
{
std::auto_ptr<A> a(new A());
foo(a);
a->bar();
return 0;
}
输出:
A ctor
foo()
A dtor
bar()
为什么被a
破坏后被foo()
调用?
我不明白的另一件事是,如果我通过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
引用传递如何影响 的生命周期auto_ptr
?