string류의 깊이 복사 복습

1382 단어
얕은 복사: 복사된 대상의 모든 변수는 이전의 대상 변수와 같은 값을 포함하고 모든 대상에 대한 인용은 이전의 대상을 가리키며 복사된 값과 동시에 주소를 복사하여 두 바늘이 같은 주소를 가리키게 한다. 자원을 방출할 때 같은 바늘이 두 번 방출되어 자원이 유출된다.딥 카피: 얕은 카피 문제를 해결하고 카피와 동시에 피카피 대상을 저장할 수 있는 공간을 다시 개척한다.
아날로그 구현 스트링 클래스
#include
#include
using namespace std;

class String{
public:
	String(const char* str)
		:_str(new char[strlen(str) + 1]){
		strcpy(_str, str);
	}
	String(const String& d)
		:_str(new char[strlen(d._str) + 1]){
		strcpy(_str, d._str);
	}
	~String(){
		cout << "~String" << endl;
		delete[]_str;
		_str = NULL;
	}
	//        
	/*String& operator=(const String& d){
		if (_str == d.str){
			return *this;
		}
		else{
			delete[]_str;
			_str = new char[strlen(d._str) + 1];
			strcpy(_str, d._str);
		}
		return *this;
	}*/
	//        
	void Swap(String& d){
		char* tmpchar;
		tmpchar = this->_str;
		this->_str = d._str;
		d._str = tmpchar;
	}
	String& operator=(const String& d){
		if (_str == d._str){
			return *this;
		}
		else{
			String tmp(d._str)
				Swap(tmp);
			return *this;
		}
	}
	void Print_Str();
private:
	char* _str;
};

void String::Print_Str(){
	cout << this->_str << endl;
}
int main(){
	String s1("abc");
	String s2("def");
	s1 = s2;
	s1.Print_Str();
	system("pause");
	return 0;

}

좋은 웹페이지 즐겨찾기