今天本身想明白了。 sp<A> spa = new A(); 与 A* a = new A(); 的区别了。 sp<A> spa = new A(); 执行的流程是: 1) A* a = new A(); 2) sp<A> spa = a; 步骤2的精髓在与, sp<A> 是一个模板类, 它存储在区栈, 因此函数结束以后, 它会主动调用析构函数。 而A* 是一个指针, 它指向的内存分配在堆区, 函数结束以后, 它不会主动调用析构函数。函数