Abh*_*hay 10
主要缺点std::auto_ptr是它具有所有权转移语义.这使得无法存储std::auto_ptr在STL容器中,因为容器在存储或获取元素时使用复制构造函数.
另外,我注意到的另一个重要方面std::auto_ptr是它们不能用于使用PIMPL习语.这是因为,它们需要完整定义包装类的析构函数.有关更详细的讨论,请参阅clc ++.m上的此主题.
更新:转让所有权
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.
Run Code Online (Sandbox Code Playgroud)
有关在STL算法使用的STL容器中使用时的含义的更多详细信息,请参阅Herb Sutter网站上的此主题.
小智 6
智能指针是 C++中经常使用,但也许不是,因为他们经常要.该std::auto_ptr有几个问题(你不能在标准库集合使用它,例如),但也有许多其他问题.其中最受欢迎的是Boost库附带的那些,它们将成为下一个C++标准的一部分 - 你应该看看.
请注意,智能指针主要是关于所有权,并删除动态创建的对象.如果您没有动态创建的对象,通常不需要智能指针:
{
int i = 42;
auto_ptr <int> p( & i ); // bad!
}
Run Code Online (Sandbox Code Playgroud)
你真的不想这样做,因为当autopointer超出范围时,它会尝试删除i.不幸的是,我不是动态创建的,所以会发生不好的事情.因此,在大多数C++程序中,您需要两种指针,智能和正常.
| 归档时间: |
|
| 查看次数: |
12282 次 |
| 最近记录: |