C++:String物件的構造及深拷貝
C++中String物件的構造以及深拷貝
拷貝構造的實現方式
- 先釋放掉_str的記憶體,然後再申請一個要拷貝的記憶體空間,再將原物件的值拷貝到目標物件中
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<list>
#include<assert.h>
#include<vld.h>
using namespace std;
namespace bit
{
class string
{
public:
string(const char* str = "")
{
if (nullptr == str)
_str = new char[1]{ '\0' };
else
{
_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;
}
~string()
{
if (_str)
{
delete[] _str;
_str = nullptr;
}
}
private:
char* _str;
};
};
int main()
{
bit::string str(nullptr);
bit::string str1("abc");
bit::string str2;
str2 = str1;
system("pause");
return 0;
}
- 構造一個臨時物件,再交換兩個容器內所有元素,再返回交換後的_str物件的值
string& operator=(const string &s)
{
if (this != &s)
{
string tmp_str(s); //臨時物件
swap(_str, tmp_str._str);
}
return *this;
}
- 為了防止因申請空間失敗而破壞要拷貝的原物件,對第一種方法進行改進
string& operator=(const string &s)
{
if (this != &s)
{
char *tmp_str = new char[strlen(s._str) + 1]; //ERROR
delete[]_str;
_str = tmp_str;
strcpy(_str, s._str);
}
return *this;
}
相關文章
- C++拷貝建構函式(深拷貝,淺拷貝)C++函式
- 物件深拷貝和淺拷貝物件
- 【JavaScript】物件的淺拷貝與深拷貝JavaScript物件
- C++淺拷貝和深拷貝C++
- 實現物件淺拷貝、深拷貝物件
- 聊聊物件深拷貝和淺拷貝物件
- C++派生類的拷貝構造C++
- PHP 物件導向 - 物件的淺拷貝與深拷貝PHP物件
- JavaScript物件的深拷貝以及淺拷貝分析JavaScript物件
- jquery之物件拷貝深拷貝淺拷貝案例講解jQuery物件
- Python - 物件賦值、淺拷貝、深拷貝的區別Python物件賦值
- C++之Big Three:拷貝構造、拷貝賦值、解構函式探究C++賦值函式
- 三目運算、物件克隆、深拷貝和淺拷貝物件
- 淺拷貝&深拷貝
- javascript對深拷貝物件的研坑JavaScript物件
- js物件實現深淺拷貝!!JS物件
- 操作字元、物件方法, 深淺拷貝字元物件
- 【JS】深拷貝與淺拷貝,實現深拷貝的幾種方法JS
- 淺拷貝和深拷貝
- 深拷貝和淺拷貝
- 淺拷貝與深拷貝
- js的深拷貝和淺拷貝JS
- 淺談深拷貝與淺拷貝?深拷貝幾種方法。
- 深拷貝
- 如何對JAVA物件進行深拷貝Java物件
- 深入深入再深入 js 深拷貝物件JS物件
- js陣列物件複製拷貝不改變原來的值,深拷貝JS陣列物件
- 詳解js中的物件的深淺拷貝JS物件
- JS深拷貝與淺拷貝JS
- iOS深拷貝和淺拷貝iOS
- js 深拷貝和淺拷貝JS
- python深拷貝與淺拷貝Python
- JavaScript淺拷貝和深拷貝JavaScript
- Java深拷貝和淺拷貝Java
- Python淺拷貝與深拷貝Python
- JavaScript深拷貝和淺拷貝JavaScript
- javascript 淺拷貝VS深拷貝JavaScript
- js 淺拷貝和深拷貝JS