溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

string類的深淺拷貝問題

發(fā)布時間:2020-07-09 23:05:17 來源:網(wǎng)絡(luò) 閱讀:271 作者:稻草陽光L 欄目:開發(fā)技術(shù)

  字符串是我們在編寫程序的時候經(jīng)常用的到的。C++庫已經(jīng)幫我們實現(xiàn)了一個功能更加強大的字符串類string,我們要去了解它是怎么實現(xiàn)的。

  只要是涉及到 string類的地方多少都會涉及到深淺拷貝的問題。在C++中,在用一個對象初始化另一個對象時,只復(fù)制了成員,并沒有復(fù)制資源,使兩個對象同時指向了同一資源的復(fù)制方式稱為淺復(fù)制。

      深拷貝是將指向內(nèi)容復(fù)制到給當(dāng)前對象新分配的緩沖區(qū)中的一種復(fù)制方式。

    下面就是自己實現(xiàn)的深拷貝string類:

#include<iostream>
#include<string.h>
using namespace std;
class String
{
public:
	String(const char* str="")
		:_str(new char[strlen(str)+1])
	{
		strcpy(_str, str);
	}
	//深拷貝
	String(const String& s)
		:_str(new char[strlen(s._str)+1])
	{
		strcpy(_str, s._str);
	}
	String& operator=(const String& s)
	{
		if (this != &s)
		{
			delete[] _str;
			_str = new char[strlen(s._str) + 1];
			strcpy(_str, s._str);
		}
		return *this;
	}
	////現(xiàn)代寫法
	//String(const String& s)
	//	:_str(NULL)
	//{
	//	String tmp(s._str);
	//	swap(tmp._str,_str);
	//}
	//String& operator=(const String& s)
	//{
	//	if (this != &s)
	//	{
	//		_str = NULL;
	//		String tmp(s);
	//		swap(tmp._str, _str);
	//	}
	//	return *this;
	//}
private:
	char* _str;
};


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI