STL学习之十一:容器值(value)语意

来源:互联网 发布:网络用语404是什么梗 编辑:程序博客网 时间:2024/04/30 04:50

本文主要介绍STL的容器值(value)语意。所有容器提供的都是值语意,而非引用语意。容器执行插入元素操作时,内部实施copy工作。所以STL容器存储的元素必须能够被copy,即必须提供copy构造函数。下面以一个示例来说明这一点。在示例中,定义了一个类对象,若使用容器(vector)存入该对象,容器内部会将该对象复制一份到容器中,这就要求对象具有copy的能力而不会发生内存泄漏或空指针现象。具体看下面示例代码:

#define  _CRT_SECURE_NO_WARNINGS#include "iostream"#include "vector"using namespace std;class Teacher{public:Teacher(char *name,int age){m_p = new char[strlen(name)+1];strcpy(m_p,name);m_age = age;}~Teacher(){if (m_p != NULL){delete [] m_p;m_p = NULL;m_age = 0;}}Teacher(const Teacher &obj){m_p = new char[strlen(obj.m_p)+1];strcpy(m_p,obj.m_p);m_age = obj.m_age;}// 重载=操作符 t3=t2=t1Teacher& operator=(const Teacher &obj){// 先把t2的旧的内存释放掉if (m_p != NULL){delete [] m_p;m_p = NULL;m_age = 0;}// 根据t1 de 大小分配内存m_p = new char[strlen(obj.m_p)+1];strcpy(m_p,obj.m_p);m_age = obj.m_age;return *this;}public:void printT(){cout << m_p << "\t" << m_age << endl;}protected:public:char *m_p;int m_age;};void main01(){Teacher t1("t1",31);t1.printT();vector<Teacher> v1;v1.push_back(t1);//将t1复制一份到容器中,这是需要考虑对象是否需要copy构造函数for (vector<Teacher>::iterator it = v1.begin();it != v1.end();it++ ){cout << it->m_age << " ";}cout << endl;}void main(){main01();cout << "hello..."<< endl;system("pause");}


原创粉丝点击