我有以下示例代码:
#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?