加载中...

STL的深浅拷贝问题

STL的深浅拷贝问题

​ STL容器所提供的都是值(value)寓意,而非引用(reference)寓意,也就是说当我们给容器中插入元素的时候,容器内部实施了拷贝动作,将我们要插入的元素再另行拷贝一份放入到容器中,而不是将原数据元素直接放进容器中,也就是说我们提供的元素必须能够被拷贝

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
usingnamespace std;

class myclass{
public:
	myclass(char* data){
		int len = strlen(data) + 1;      //计算传进来的字符串长度
		this->data =newchar[len];        //在堆区分配了len字节内存
		strcpy(this->data, data);        //将数据拷贝到我们在堆分配的内存中
	}
	//增加拷贝构造函数
	myclass(const myclass& mc){
		int len = strlen(mc.data) + 1;
		this->data =newchar[len];
		strcpy(this->data, mc.data);
	}
	//重载operator=操作符
	myclass& operator=(const myclass& mc){
       if (this->data != NULL){
			delete[] this->data;
			this->data = NULL;
		}
		int len = strlen(mc.data) + 1;
		this->data =newchar[len];
		strcpy(this->data, mc.data);
		return*this;
	}
  
	//既然我们在堆区分配了内存,需要在析构函数中释放内存
	~myclass(){
		if(NULL!=this->data){
			delete[]this->data;
			this->data =NULL;
		}
	}
private:
	char* data;
};

void test_deep_copy(){
	char* data ="abcd";
	myclass mc(data);    //创建myclass的实例 并用char*字符串data初始化对象

	vector<myclass> v;   //创建vector容器
	v.push_back(mc);     //将mc实例插入到vector容器尾部

}

int main(){

	test_deep_copy();//调用测试函数
	return0;
}

1.把对象放入容器,其实是拷贝一份对象到容器。

2.注意:

​ 1.拷贝构造要能被调用
​ 2.注意要浅拷贝问题

posted @ 2024-02-21 17:25  江寒雨  阅读(42)  评论(0)    收藏  举报