【c++】異常安全深賦值
// 深拷貝,異常安全的深賦值
#include <iostream>
#include <string.h>
using namespace std;
class String
{
public:
String(const char *str = " ")
{
m_data = new char[strlen(str) + 1];
strcpy(m_data, str);
}
String(const String &s)
{
m_data = new char[strlen(s.m_data) + 1];
strcpy(m_data, s.m_data);
}
// 異常安全的深賦值
// 一般深賦值要先釋放原來m_data的空間,若原來空間裡的東西還有用,就會帶來很大的麻煩
// 這種深賦值可以避免出現那樣的情況
String& operator=(const String &s)
{
if (&s != this)
{
String tmp(s.m_data);// 用要賦值的資料重新構造出一個物件
char *ptmp = m_data;// 交換指標的指向
m_data = tmp.m_data;
tmp.m_data = ptmp;
}
return *this;
}
~String()
{
delete[]m_data;
}
public:
void print()
{
cout << m_data << endl;
}
private:
char *m_data;
};
int main()
{
String s("hello");
s.print();
String s1(s);
s1.print();
String s2;
s2 = s1;
s2.print();
return 0;
}
相關文章
- 【c++】深賦值與淺賦值C++賦值
- C++異常安全C++
- C++異常安全的思考C++
- C++異常C++
- 賦值、淺拷貝與深拷貝賦值
- C++ 初始化與賦值C++賦值
- 有關C++異常安全的一點個人想法 (轉)C++
- C++ new 和異常C++
- C++ 異常處理C++
- C++異常處理C++
- C++筆記--異常C++筆記
- AI賦能一鍵自動檢測:頁面異常、控制元件異常、文字異常AI控制元件
- 【Python】直接賦值,深拷貝和淺拷貝Python賦值
- C++ 異常機制(上)C++
- c++異常處理格式C++
- c++ 異常處理(2)C++
- c++ 異常處理(1)C++
- c++異常處理 (轉)C++
- 【C++】 C++異常捕捉和處理C++
- js資料型別賦值,淺拷貝,深拷貝JS資料型別賦值
- 淺析賦值、淺拷貝、深拷貝的區別賦值
- windows核心程式設計---未處理異常,向量化異常處理與C++異常Windows程式設計C++
- C++異常處理機制C++
- JavaScript的記憶體空間、賦值和深淺拷貝JavaScript記憶體賦值
- Python - 物件賦值、淺拷貝、深拷貝的區別Python物件賦值
- C++錯誤和異常處理C++
- C++檢測異常assert()函式C++函式
- C++整理19_異常處理C++
- 獲取input框輸入值異常
- 漫畫|有趣的瞭解一下賦值、深淺拷貝賦值
- 安全通道異常識別系統
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- C++ 異常處理機制詳解:輕鬆掌握異常處理技巧C++
- 在 C++ 中捕獲 Python 異常C++Python
- Linux 下 C++ 異常處理技巧LinuxC++
- C++異常處理與臨時副本C++
- C++筆記--名字空間和異常C++筆記
- C++基礎::自制異常定位器C++