基本数据类型,比如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<>,除非你十分清楚这样做的实际意义,并且不会有错误和危险出现。