自动指针的优缺点

2022-08-26 00:00:00 c++ smart-pointers

与普通指针相比,使用自动指针(AUTO_PTR)有哪些优点和缺点?我听说它可以自动释放内存,但为什么不经常使用呢?


解决方案

std::auto_ptr的主要缺点是它具有过户语义。这使得std::auto_ptr无法存储在STL容器中,因为这些容器在您存储或获取元素时使用复制构造函数。

此外,我注意到std::auto_ptr的另一个重要方面是它们不能用于PIMPL习语的使用。这是因为,它们需要包装类的析构函数的完整定义。有关更详细的讨论,请参阅c.l.c++.m上的this线程。

更新:过户

class Test {};
std::auto_ptr<Test> ap_test_1(new Test);
std::auto_ptr<Test> ap_test_2(new Test);

ap_test_2 = ap_test_1;  // here ap_test_1's ownership is transferred i.e. ap_test_2 is the 
                        // new owner and ap_test_1 is NULL.

有关这在STL算法使用的STL容器中使用时意味着什么的更多详细信息,请参阅Herb Sutter网站上的this线程。

相关文章