Kev*_*vin 123
C++标准规定STL元素必须是"可复制的"和"可分配的".换句话说,必须能够分配或复制元素,并且这两个元素在逻辑上是独立的.std::auto_ptr
不符合此要求.
以此代码为例:
class X
{
};
std::vector<std::auto_ptr<X> > vecX;
vecX.push_back(new X);
std::auto_ptr<X> pX = vecX[0]; // vecX[0] is assigned NULL.
Run Code Online (Sandbox Code Playgroud)
为了克服这种限制,你应该使用std::unique_ptr
,std::shared_ptr
或std::weak_ptr
智能指针或升压等价物,如果你没有C++ 11. 以下是这些智能指针的boost库文档.
Fra*_*ger 65
该拷贝语义的auto_ptr
不与容器兼容.
具体来说,将一个复制auto_ptr
到另一个不会创建两个相等的对象,因为一个对象已失去其对指针的所有权.
更具体地说,复制a auto_ptr
会导致其中一个副本放开指针.未定义容器中的哪些保留.因此,如果存储auto_ptrs
在容器中,则可以随机丢失对指针的访问权限.
Laz*_*zer 38
关于这个主题的两篇超级优秀文章:
Gar*_*our 17
STL容器需要能够复制您存储在其中的项目,并且旨在使原始和副本等效.自动指针对象具有完全不同的合同,因此复制会创建所有权转移.这意味着auto_ptr的容器将表现出奇怪的行为,具体取决于使用情况.
详细描述了有效STL(Scott Meyers)第8项中可能出现的问题,以及Effective C++(Scott Meyers)第13项中的不详细描述.
Dus*_*etz 12
STL容器存储包含项的副本.复制auto_ptr时,它会将旧ptr设置为null.许多容器方法都被这种行为打破了.
归档时间: |
|
查看次数: |
45670 次 |
最近记录: |