STL支持int、long、char等基本数据类型的而不支持引用的本质

基本数据类型,比如int、long、char等都具有默认构造函数和拷贝构造函数。这是标准C++为了使之与ADT/UDT一致而对它们改造的结果,同时也是为了适应STL的需要。

因为:当初始创建一个非空容器对象的时候,默认调用元素类型的默认构造函数或拷贝构造函数来初始化其中的元素对象,如果基本数据类型没有这些函数,STL容器就不能适用于基本数据类型。

引用则不能作为STL容器的元素类型:第一,引用创建时必须初始化为一个具体的对象,而STL容器不恩能够满足这一要求;第二,引用没有构造函数和析构函数,更没有赋值语义。就是说,STL容器只支持对象语义,而不支持引用语义。下面的定义则是错误的:

std::list<double&> ld(10);或typedef Object& ObjectRef;std::set<ObjectRef>objSet;

想让容器支持引用语义,就得把引用封装为对象,就像把指针封装为对象那样。

采用接管方式创建和释放不对称的指针对象都不适合作为STL容器的元素,包括普通指针和auto_ptr<>,除非你十分清楚这样做的实际意义,并且不会有错误和危险出现。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值