auto_ptr 被销毁时会自动删除它所指之物,所以不能让多个auto_ptr指向同一个对象。所以,通过构造函数或者赋值操作赋值,原对象会变成NULL
tr1::shared_ptr 两者都是在析构函数中做DELETE操作,而不是DELETE[],所以不能在array上用。
两者都重载了operator-> / operator. 操作,经由.get()获得资源指针
用独立的语句将newed对象存储于智能指针内,如果不这样做,一旦异常被抛出,有可能导致无法察觉的资源泄露:
void test(std::tr1::shared_ptr<ClassA> classa, int priority);
std::tr1::shared_ptr<ClassA> classa;
test<classa, getPriority()>;//right
std::tr1::shared_ptr<classA>(new ClassA),getPriority());//wrong