Smart_ptr源码剖析和问题探究
2015-07-30 15:56
260 查看
1.auto_ptr 为什么不能作为STL容器元素类型?
auto_ptr的源码,operator =的代码实现:
operator=(auto_ptr& __a) throw()
{
reset(__a.release());
return *this;
}
由于开发者在设计auto_ptr时,并未引入计数机制,故不能让两个auto_ptr指向同一块内存,会出现A正在使用而B却将共有的对象析构等严重问题。
所以在copy constructor或operator=时,要release参数的指针。
而STL中的operator = :
obj &operator=(const obj &rhs)
{}
由于参数是const obj &rhs,则程序不允许在此函数中改变rhs的值。
因此,auto_ptr和STL容器算法有很大的冲突,所以auto_ptr不能作为元素放入STL容器内。
auto_ptr的源码,operator =的代码实现:
operator=(auto_ptr& __a) throw()
{
reset(__a.release());
return *this;
}
由于开发者在设计auto_ptr时,并未引入计数机制,故不能让两个auto_ptr指向同一块内存,会出现A正在使用而B却将共有的对象析构等严重问题。
所以在copy constructor或operator=时,要release参数的指针。
而STL中的operator = :
obj &operator=(const obj &rhs)
{}
由于参数是const obj &rhs,则程序不允许在此函数中改变rhs的值。
因此,auto_ptr和STL容器算法有很大的冲突,所以auto_ptr不能作为元素放入STL容器内。
相关文章推荐
- JUnit中Failure、Error区别
- PAT (Advanced Level) 1086. Tree Traversals Again (25) 根据先根遍历数组创建树
- vba如何连接db2数据库
- Linux 命令之 xargs
- 【原文件】tinyxmlerror.cpp
- 类单例
- 为什么很多年轻人总会感到迷茫
- Ubuntu 12.04下boost库的交叉编译
- ios-汤姆猫
- 黑马程序员 日记(十)
- HashMap和Hashtable的区别
- hdoj 1950 Bridging signals
- Cygwin上安装openssl
- 百度云推 pem
- iOS系列教程之用instruments来检验你的app
- 【原文件】tinyxml.cpp
- 【原文件】tinystr.cpp
- 网页中嵌入媒体播放器
- 如何保障流式处理的数据一致性
- 算法中的增长率(Rate of Growth)是什么意思?